Java集合框架學習筆記
從集合框架圖中可以看出,分為兩類
以Collection為接口的元素集合類型,以Map為接口的映射集合類型
Collection類型又分為兩大類Set和List
所有集合的實現(xiàn)類都不是直接實現(xiàn)集合類接口,而是都繼承一個相應(yīng)的抽象類
Set集合的特征:就是元素無重復(fù),但是無序(所以Set接口以及實現(xiàn)類沒有按位置index操作的添加、刪除、訪問方法)
List集合的特征:集合有序排列,可以有重復(fù)元素,可以隨機訪問(使用位置index添加、刪除、訪問元素)
List的實現(xiàn)類有ArrayList,LinkedList,這兩個都是非線程安全的,Vector是線程安全的List實現(xiàn)類,Stack是vector的子類
ArrayList的內(nèi)部實現(xiàn)是基于內(nèi)部數(shù)組Object[],所以從概念上講,它更像數(shù)組,但LinkedList的內(nèi)部實現(xiàn)是基于一組連接的記錄,所以,它更像一個鏈表結(jié)構(gòu)
在ArrayList的前面或中間插入數(shù)據(jù)時,必須將其后的所有數(shù)據(jù)相應(yīng)的后移,這樣必然要花費較多時間,所以,當你的操作是在一列數(shù)據(jù)的后面添加數(shù)據(jù)而不是在前面或中間,并且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;
而訪問鏈表中的某個元素時,就必須從鏈表的一端開始沿著連接方向一個一個元素地去查找,直到找到所需的元素為止,所以,當你的操作是在一列數(shù)據(jù)的前面或中間添加或刪除數(shù)據(jù),并且按照順序訪問其中的元素時,就應(yīng)該使用LinkedList了。
Set的實現(xiàn)類有HashSet,TreeSet以及子類LinkedHashSet,這三個類是非線程安全的TreeSet是基于樹結(jié)構(gòu)的集合,LinkedHashSet具備按照插入先后順序訪問的功能,HashSet訪問元素的順序是不確定的,TreeSet的訪問順序是按照樹接口的順序訪問的Map的實現(xiàn)類有HashMap,IdentityHashMap,WeakHashMap,TreeMap,以及LinkedHashMap子類,這些類都是非線程安全的,WeakHashMap是一種改進的HashMap,它對key實行“弱引用”,如果一個key不再被外部所引用,那么該key可以被GC回收。
HashTable是線性安全的,HashTable不能插入null空元素
【編輯推薦】