Java集合是java提供的一個工具包,全部繼承自java.util.*
。主要包括兩大接口Collection
接口和Map
接口以及相關的工具類(Iterator
迭代器接口、Enumeration
枚舉類、Arrays
和Colletions
)。
(1)Collection
是一個接口,包含List
列表和Set
集合。其中List
是有序的隊列,元素值可以重複,索引從0開始,實現類有LinkedList
,ArrayList
,Vector
;而Set
是一個不允許有重複元素的集合,Set
的實現類有HashSet
和TreeSet
。HashSet
依賴於HashMap
,它實際上是通過HashMap
實現的;TreeSet
依賴於TreeMap
,它實際上是通過TreeMap
實現的。
(2)Map是一個映射接口,通過key-value
鍵值對實現。實現類有HashMap
,TreeMap
,WeakHashMap
,Hashtable
。
(3)Iterator
是遍歷集合的工具,Enumeration
也是遍歷集合,但它的的功能要比Iterator
少,只能在Hashtable
, Vector
, Stack
中使用。
(4)Arrays
和`Collections是操作數組、集合的兩個工具類。
下面是具體一點的比較:
(1) ArrayList
, LinkedList
, Vector
, Stack
是List的4個實現類,比較他們的異同。
1)ArrayList
是一個數組隊列,相當於動態數組。它由數組實現,隨機訪問效率高,隨機插入、隨機刪除效率低。
2)LinkedList
是一個雙向鏈表。它也可以被當作堆棧、隊列或雙端隊列進行操作。LinkedList
隨機訪問效率低,但隨機插入、隨機刪除效率高。
3)Vector
是矢量隊列,和ArrayList
一樣,它也是一個動態數組,由數組實現。但是ArrayList
是非線程安全的,而Vector
是線程安全的。
4)Stack
是棧,它繼承於Vector
。它的特性是:先進後出(FILO, First In Last Out)。
(2)HashMap
、HashTable
、TreeMap
的區別
1)HashMap
是鍵值對的方式存儲的,但不能保證次序,單線程;
2)HashTable
與HashMap
存儲方式相同,但是是線程安全的;
3)TreeMap
是有序的鍵值對,基於紅黑樹排序。