java集合框架是java提供的工具包,在java.util.*中,這個包中包含了常用的數據結構:集合、數組、鏈表、棧、隊列、映射等。java集合框架主要可以分爲四個部分:List列表、Set集合、Map映射和工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections)。
java集合框架示意圖如下:
從圖中可以看出,java中集合框架有兩條分支:Collection和Map。
1. Collection是一個接口,它包含了集合的基本操作和屬性。Collection包含了List和Set兩大分支
(1) List是一個有序的隊列,每一個元素都有它的索引,第一個元素的索引值是0,List的實現類有ArrayList,LinkedList,Vector和Stack。
(2) Set是一個不允許有重複元素的集合。Set的實現類有HashSet和TreeSet。HashSet依賴於HashMap,它實際上是通過HashMap實現的;TreeSet依賴於TreeMap,它實際上是通過TreeMap實現的。
2. Map是一個映射接口,即key-value鍵值對。Map中的每一個元素包含一個key和key對應的value。
(1) AbstractMap是個抽象類,它實現了Map接口中的大部分API,而HashMap,TreeMap,WeakHashMap都是繼承與AbstractMap。
(2) HashTable雖然繼承與Dictionary,但是它實現了Map接口。
3. Iterator是遍歷集合的工具,我們通常使用Iterator迭代器來遍歷集合。Collection依賴於Iterator是因爲Collection的實現類都要實現iterator()方法,返回一個Iterator對象。ListIterator是專門爲遍歷List而存在的。
4. Enumeration是JDK1.0引入的抽象類,作用和Iterator一樣,也是遍歷集合,但是Enumeration的功能要比Iterator少,在上面的框圖中,Enumeration只能在HashTable,Vector和Stack中使用。
5. Arrays和Collections是操作數組合集合的兩個工具類,它們提供了很多有用的方法。
其中線程安全的集合有Vector, HashTable
1.Vector
Vector和ArrayList類似,是長度可變的數組,與ArrayList不同的是,Vector是線程安全的,它給幾乎所有的public方法都加上了synchronized關鍵字。由於加鎖導致性能降低,在不需要併發訪問同一對象時,這種強制性的同步機制就顯得多餘,所以現在Vector已被棄用
2.HashTable
HashTable和HashMap類似,不同點是HashTable是線程安全的,它給幾乎所有public方法都加上了synchronized關鍵字,還有一個不同點是HashTable的K,V都不能是null,但HashMap可以,它現在也因爲性能原因被棄用了
以上是集合框架的總覽,如有錯誤,歡迎留言指正~