實現是用於存儲集合的數據對象,它實現了接口部分中描述的接口,本節描述瞭如下幾種實現:html
java.util.concurrent
包的一部分。通用實現總結在下表中。java
接口 | 哈希表實現 | 可調整大小的數組實現 | 樹實現 | 鏈表實現 | 哈希表+鏈表實現 |
---|---|---|---|---|---|
Set | HashSet | TreeSet | LinkedHashSet | ||
List | ArrayList | LinkedList | |||
Queue | |||||
Deque | ArrayDeque | LinkedList | |||
Map | HashMap | TreeMap | LinkedHashMap |
從表中能夠看到,Java集合框架提供了Set、List和Map接口的幾種通用實現。在每種狀況下,其餘全部條件都相同狀況下,一個實現(HashSet、ArrayList和HashMap)顯然是用於大多數應用程序的一個實現。請注意,SortedSet和SortedMap接口在表中沒有列出,每一個接口都有一個實現(TreeSet和TreeMap),並在Set
和Map
行中列出。有兩種通用的Queue
實現 — LinkedList(它也是List
實現)和PriorityQueue(表中省略)。這兩種實現提供了很是不一樣的語義:LinkedList
提供FIFO語義,而PriorityQueue
根據其值對元素進行排序。程序員
每一個通用實現都提供其接口中包含的全部可選操做,所有容許null
元素、鍵和值,都不是同步的(線程安全的),它們都具備快速失敗的迭代器,該迭代器可在迭代過程當中檢測到非法的併發修改,而且能夠快速乾淨地失敗,而不會在將來的不肯定時間冒着任意、不肯定的行爲的風險。所有都是Serializable
,而且都支持公共clone
方法。編程
這些實現不一樣步的事實表明了與過去的突破:遺留集合Vector
和Hashtable
已同步,之因此採用本方法,是由於在同步沒有好處的狀況下常用集合。這些用途包括單線程使用、只讀使用和做爲實現自身同步的較大數據對象的一部分使用,一般,最好的API設計作法是不要讓用戶爲不使用的功能付費,此外,在某些狀況下,沒必要要的同步可能致使死鎖。segmentfault
若是須要線程安全的集合,則在「包裝實現」部分中介紹的同步包裝器容許將任何集合轉換爲同步集合。所以,對於通用實現來講,同步是可選的,而對於遺留實現來講,它是強制性的。此外,java.util.concurrent
包提供了BlockingQueue
接口(擴展Queue
)和ConcurrentMap
接口(擴展Map
)的併發實現,這些實現比單純的同步實現提供更高的併發性。api
一般,你應該考慮接口,而不是實現,這就是爲何本節中沒有編程示例的緣由,在大多數狀況下,實現的選擇僅影響性能。首選樣式,如「接口」部分所述,是在建立集合時選擇一種實現,並當即將新集合分配給相應接口類型的變量(或將集合傳遞給須要接口類型參數的方法)。這樣,程序就不會依賴於給定實現中添加的任何方法,從而使程序員在有性能問題或行爲細節保證的任什麼時候候均可以自由更改實現。數組
實現是用於存儲集合的數據對象,它們實現了接口課程中描述的接口。安全
Java集合框架提供了幾個核心接口的通用實現:併發
Set
接口,HashSet
是最經常使用的實現。List
接口,ArrayList
是最經常使用的實現。Map
接口,HashMap
是最經常使用的實現。Queue
接口,LinkedList
是最經常使用的實現。Deque
接口,ArrayDeque
是最經常使用的實現。每一個通用實現都提供其接口中包含的全部可選操做。oracle
Java集合框架還爲須要非標準性能、使用限制或其餘異常行爲的狀況提供了幾種特殊用途的實現。
java.util.concurrent
包包含幾個集合實現,這些實現是線程安全的,但不受單個排除鎖的約束。
Collections
類(與Collection
接口相對)提供了對集合進行操做或返回集合的靜態方法,這些方法稱爲包裝實現。
最後,有幾種便利的實現,當你不須要通用實現時,它們的效率可能會比通用實現高,可經過靜態工廠方法提供便捷實現。