1. 程式人生 > >Collection和Map的 簡單介紹

Collection和Map的 簡單介紹

集合主要有Collection和Map介面。

List特點:元素有放入順序,元素可重複 
Map特點:元素按鍵值對儲存,無放入順序 
Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的) 
List介面有三個實現類:LinkedList,ArrayList,Vector 
LinkedList:底層基於連結串列實現,連結串列記憶體是散亂的,每一個元素儲存本身記憶體地址的同時還儲存下一個元素的地址。連結串列增刪快,查詢慢 
ArrayList和Vector的區別:ArrayList是非執行緒安全的,效率高;Vector是基於執行緒安全的,效率低 

Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet 
SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現) 
Query介面有一個實現類:LinkList 
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap 
HashMap非執行緒安全,高效,支援null;HashTable執行緒安全,低效,不支援null 
SortedMap有一個實現類:TreeMap 
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,儲存的是鍵值對 
set 一般無序不重複.map kv 結構 list 有序 。

List,Set,Map是否繼承自Collection介面? 

答:List,Set是,Map不是。 Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素。一些Collection允許相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接繼承自Collection的類,Java JDK提供的類都是繼承自Collection的"子介面",如:List和Set。 
注意:Map沒有繼承Collection介面,Map提供key到value的對映。一個Map中不能包含相同key,每個key只能對映一個value。Map介面提供3種集合的檢視,Map的內容可以被當做一組key集合,一組value集合,或者一組key-value對映。 

List按物件進入的順序儲存物件,不做排序或編輯操作。Set對每個物件只接受一次,並使用自己內部的排序方法(通常,你只關心某個元素是否屬於Set,而不關心它的順序--否則應該使用List)。Map同樣對每個元素儲存一份,但這是基於"鍵"的,Map也有內建的排序,因而不關心元素新增的順序。如果新增元素的順序對你很重要,應該使用 LinkedHashSet或者LinkedHashMap.

詳細介紹: 
List特點:元素有放入順序,元素可重複 
Map特點:元素按鍵值對儲存,無放入順序 
Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的) 
List介面有三個實現類:LinkedList,ArrayList,Vector 
LinkedList:底層基於連結串列實現,連結串列記憶體是散亂的,每一個元素儲存本身記憶體地址的同時還儲存下一個元素的地址。連結串列增刪快,查詢慢 
ArrayList和Vector的區別:ArrayList是非執行緒安全的,效率高;Vector是基於執行緒安全的,效率低 
Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet 
SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現) 
Query介面有一個實現類:LinkList 
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap 
  HashMap非執行緒安全,高效,支援null;HashTable執行緒安全,低效,不支援null 
SortedMap有一個實現類:TreeMap 
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,儲存的是鍵值對 
set 一般無序不重複.map kv 結構 list 有序 。

List的功能方法

  實際上有兩種List: 一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。

  List : 次序是List最重要的特點:它保證維護元素特定的順序。List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這隻推薦LinkedList使用。)一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。

  ArrayList : 由陣列實現的List。允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。ListIterator只應該用來由後向前遍歷ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷要大很多。

  LinkedList : 對順序訪問進行了優化,向List中間插入與刪除的開銷並不大。隨機訪問則相對較慢。(使用ArrayList代替。)還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何介面或基類中定義過)使得LinkedList可以當作堆疊、佇列和雙向佇列使用。

  Set的功能方法

  Set具有與Collection完全一樣的介面,因此沒有任何額外的功能,不像前面有兩個不同的List。實際上Set就是Collection,只是行為不同。(這是繼承與多型思想的典型應用:表現不同的行為。)Set不儲存重複的元素(至於如何判斷元素相同則較為負責)

  Set : 存入Set的每個元素都必須是唯一的,因為Set不儲存重複元素。加入Set的元素必須定義equals()方法以確保物件的唯一性。Set與Collection有完全一樣的介面。Set介面不保證維護元素的次序。

  HashSet : 為快速查詢設計的Set。存入HashSet的物件必須定義hashCode()。

  TreeSet : 儲存次序的Set, 底層為樹結構。使用它可以從Set中提取有序的序列。

  LinkedHashSet : 具有HashSet的查詢速度,且內部使用連結串列維護元素的順序(插入的次序)。於是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。

  Map的功能方法

  方法put(Object key, Object value)新增一個“值”(想要得東西)和與“值”相關聯的“鍵”(key)(使用它來查詢)。方法get(Object key)返回與給定“鍵”相關聯的“值”。可以用containsKey()和containsValue()測試Map中是否包含某個“鍵”或“值”。標準的Java類庫中包含了幾種不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它們都有同樣的基本介面Map,但是行為、效率、排序策略、儲存物件的生命週期和判定“鍵”等價的策略等各不相同。

  執行效率是Map的一個大問題。看看get()要做哪些事,就會明白為什麼在ArrayList中搜索“鍵”是相當慢的。而這正是HashMap提高速度的地方。HashMap使用了特殊的值,稱為“雜湊碼”(hash code),來取代對鍵的緩慢搜尋。“雜湊碼”是“相對唯一”用以代表物件的int值,它是通過將該物件的某些資訊進行轉換而生成的。所有Java物件都能產生雜湊碼,因為hashCode()是定義在基類Object中的方法。

  HashMap就是使用物件的hashCode()進行快速查詢的。此方法能夠顯著提高效能。

  Map : 維護“鍵值對”的關聯性,使你可以通過“鍵”查詢“值”

  HashMap : Map基於散列表的實現。插入和查詢“鍵值對”的開銷是固定的。可以通過構造器設定容量capacity和負載因子load factor,以調整容器的效能。

  LinkedHashMap : 類似於HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用連結串列維護內部次序。

  TreeMap : 基於紅黑樹資料結構的實現。檢視“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在於,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。

  WeakHashMao : 弱鍵(weak key)Map,Map中使用的物件也被允許釋放: 這是為解決特殊問題設計的。如果沒有map之外的引用指向某個“鍵”,則此“鍵”可以被垃圾收集器回收。

  IdentifyHashMap : 使用==代替equals()對“鍵”作比較的hash map。專為解決特殊問題而設計。

http://m.blog.csdn.net/article/details?id=8682655

相關推薦

面試系列:常見的容器listmap簡單介紹

Android 列表資料結構一般常用兩種ArrayList和LinkedList 兩種列表結構主要是根據不同的需求選用。 ArrayList的底層是陣列結構,多用於查詢。這應該也是我們最長使用的資料結構了,因為android中的列表展示資料過於多,配合ListView和R

java集合:CollectionMap介紹

Collection集合://java.util.Collection                  List介面:    List集合包括List介面以及List介面的所有實現類。List集合中的元素允許重複,元素的順序就是插入的順序          List介面

CollectionMap簡單介紹

集合主要有Collection和Map介面。List特點:元素有放入順序,元素可重複 Map特點:元素按鍵值對儲存,無放入順序 Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)

Java基礎(18):集合(容器)—CollectionMap兩大體系介紹用法

boolean add(E e)_______________________________新增指定元素 boolean addAll(Collection c)___________________將指定集合中所有元素都新增到此 collection boolean contains(Object

12. 集合類CollectionMap

sid 並且 當前 ria static indexof tran alt -i html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,addr

第十一課 集合類CollectionMap

什麽是 基本數據類型 16px 開始 有序 面向對象 style 數據 取出 集合類 面向對象語言對事物的體現都是以對象的形式,所以為了方便對多個對象的操作,就對對象進行存儲,集合就是存儲對象最常用的方式。 數組和集合類都是容器,他們有什麽不同? 數組雖然也可以存儲對象,但

java基礎- Collectionmap

-s http 通用 java基礎 pos cto 構造方法 ont 保存 使用構造方法時,需要保留一個無參的構造方法靜態方法可以直接通過類名來訪問,而不用創建對象。--Java代碼的執行順序:靜態變量初始化→靜態代碼塊→初始化靜態方法→

LDAP服務器的概念原理簡單介紹

SM wrap add PE tle 多個 ural pager alc 1. 目錄服務 目錄是一個為查詢、瀏覽和搜索而優化的專業分布式數據庫,它呈樹狀結構組織數據,就好象Linux/Unix系統中的文件目錄一樣。目錄數據庫和關系

3htmlcss簡單介紹

html和css簡單的介紹 1. base標籤 網頁中的所有連結的基礎連結,base標籤裡面的連結會影響頁面中的所有的連結,除非連結設定了協議。 2. form表單 作用:登陸或者註冊,上傳,輸入使用者名稱和密碼。 2.1 form標籤中的常見的屬性 action

Django入門系列之(Django簡介rom簡單介紹)

1 django中app的概念: 大學:----------------- 專案 資訊學院 ----------app01 物理學院-----------app02 ****強調***:建立了app,要在配置檔案中註冊 ...2 模板路徑配置: 1 templates資料夾 2 settings裡註冊一下 3

Android List、SetMap介紹使用

一、前言 Android中常用的資料結構包括List、Set和Map這三大類的集合,其中List和Set屬於Collection。List與Set的區別在於List可以存放重複的資料,但是Set不可以。 Map一般為key-value這樣的對於關係,比如常用的HashMap。 And

CollectionMap

Collection List(存取有序,有索引,可以重複) ArrayList LinkedList Vector Set(存取無序,無索引,不可以重複) HashSet

Java基礎 @org.junit.Test-單元測試方法 + 操縱CollectionMap的工具類 : Collections 的sort/binarySearch/max/min等靜態方法

單元測試程式碼:   ( 在IDEA中先輸入'@Test '然後根據提示進行自動修訂即可!!執行時直接執行即可!         若有多個單元測試塊的時候,直接把滑鼠放在哪裡就自動在哪裡執行那個單元塊) import java.util.*; /**操縱Collection和Map

Java集合類根介面:Collection Map

前言 在前文中我們瞭解了幾種常見的資料結構,這些資料結構有著各自的應用場景,並且被廣泛的應用於程式語言中,其中,Java中的集合類就是基於這些資料結構為基礎。 Java的集合類是一些非常實用的工具類,主要用於儲存和裝載資料 (包括物件),因此,Java的集合類也被成為容器。在Java中,所有的集合類都位於

「 深入淺出 」java集合CollectionMap

本系列文章主要對java集合的框架進行一個深入淺出的介紹,使大家對java集合有個深入的理解。 本篇文章主要具體介紹了Collection介面,Map介面以及Collection介面的三個子介面Set,List,Queue。 什麼是集合 Java集合類存放於 jav

java中的集合框架:Collection Map

集合:包含多個元素的物件,又稱容器。 集合框架:一個代表、操作集合的統一架構,所有的集合框架都包含:介面、實現類以及演算法。 **介面:**表示集合的抽象資料型別。介面允許我們操作集合時不必關注具體實現,從而達到“多型”。在面向物件程式語言中,介面通常用來形成規範。 **實現類:**

CollectionMap總結

一、定義    集合框架是為表示和操作集合而規定的一種統一的標準的體系結構,在java中的集合框架主要分為兩部分:Collection介面和Map介面。二、  用法(一)集合框架涉及的資料結構    1

Java Collection Map類層次結構圖

歡迎指正! 坑爹的,圖片一部分看不全,再上一張吧。 幾點經驗:摘自think in java 4.Use an ArrayList if you’re doing a lot of random accesses, but a LinkedList if you w

開源許可協議,開源許可證GPL、BSD、MIT、Mozilla、ApacheLGPL簡單介紹

文章來源: 《開源時代》2010.02 第十七期 借鑑博文: 當Adobe、Microsoft、Sun等一系列巨頭開始表現出對”開源”的青睞時,”開源”的時代即將到來!現今存在的開源協議很多,而經過Open Source Initiative組

Java NIO介紹(二)————無堵塞ioSelector簡單介紹

無堵塞IO介紹 既然NIO相比於原來的IO在讀取速度上其實並沒有太大區別(因為NIO出來後,IO的低層已經以NIO為基礎重新實現了),那麼NIO的優點是什麼呢? NIO是一種同步非阻塞的I/O模型,也是I/O多路複用的基礎,而且已經被越來越多地應用到大型應用伺服器,成為解決