上圖中橢圓為接口晚树,方形為類
實現(xiàn)為繼承凿滤,虛線為實現(xiàn)
Collection
├List 有序
│├LinkedList
│├ArrayList 常用
│└Vector 線程安全,現(xiàn)在已經(jīng)不用了
└Set 無重復(fù)
│├HashSet: 無序
│├TreeSet :TreeSet類實現(xiàn)了SortedSet接口,有序,
Map
├Hashtable 線程安全梦鉴,不用了
├HashMap 底層是數(shù)組鏈表
└TreeMap 底層是紅黑樹
List,Set,Map 基礎(chǔ)講解
1霸妹、List(有序十电、可重復(fù))
List里存放的對象是有序的,同時也是可以重復(fù)的叹螟,List關(guān)注的是索引鹃骂,擁有一系列和索引相關(guān)的方法,查詢速度快罢绽。因為往list集合里插入或刪除數(shù)據(jù)時畏线,會伴隨著后面數(shù)據(jù)的移動,所有插入刪除數(shù)據(jù)速度慢良价。
ArrayList和LinkedList在用法上沒有區(qū)別寝殴,但是在功能上還是有區(qū)別的。通常來說明垢,LinkedList經(jīng)常用在增刪操作較多而查詢操作很少的情況下蚣常,ArrayList則相反。但是實際上ArrayList更加常用一點痊银,增刪情況下性能差距并不明顯抵蚊。
2、Set(無序溯革、不能重復(fù))
Set里存放的對象是無序贞绳,不能重復(fù)的,集合中的對象不按特定的方式排序鬓照,只是簡單地把對象加入集合中熔酷。
hashSet的底層是由hashMap實現(xiàn),實際是數(shù)組豺裆,其查詢效率非常高拒秘。而且在增加和刪除的時候由于運用的hashCode的比較開確定添加元素的位置号显,所以不存在元素的偏移,所以效率也非常高躺酒。因為hashSet查詢和刪除和增加元素的效率都非常高押蚤。
3、Map(鍵值對羹应、鍵唯一揽碘、值不唯一)
Map集合中存儲的是鍵值對,鍵不能重復(fù)园匹,值可以重復(fù)雳刺。根據(jù)鍵得到值,對map集合遍歷時先得到鍵的set集合裸违,對set集合進行遍歷掖桦,得到相應(yīng)的值。
HashMap
HashMap最多只允許一條記錄的鍵為Null供汛,允許多條記錄的值為Null枪汪,是非同步的
Hashtable
Hashtable與HashMap類似,是HashMap的線程安全版怔昨,雀久,它繼承自Dictionary類,不同的是它不允許記錄的鍵或者值為null趁舀,效率較低赖捌。
LinkedHashMap
LinkedHashMap保存了記錄的插入順序,在用Iteraor遍歷LinkedHashMap時赫编,先得到的記錄肯定是先插入的巡蘸,在遍歷的時候會比HashMap慢奋隶,有HashMap的全部特性擂送。
TreeMap
TreeMap實現(xiàn)SortMap接口抢肛,底層為紅黑樹(平衡的二叉排序樹)求类,能夠把它保存的記錄根據(jù)鍵排序,默認是按鍵值的升序排序(自然順序)萍恕,也可以指定排序的比較器境氢,當(dāng)用Iterator遍歷TreeMap時蟀拷,得到的記錄是排過序的。不允許key值為空萍聊,非同步的问芬;
4、Queue 接口
一些比較
Vector和ArrayList
1寿桨,vector是線程同步的此衅,强戴,而arraylist是線程異步的,是不安全的挡鞍。
2骑歹,vector擴容時為先前長度的2倍,而arraylist 擴容為1.5倍+1墨微;
arraylis有擴容因子 道媚,默認為0.75,初始長度為10
參考 :https://www.zhihu.com/question/31948523
arraylist和linkedlist
1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)翘县,LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)最域。
2.對于隨機訪問get和set,ArrayList優(yōu)于LinkedList锈麸,因為LinkedList要移動指針羡宙。
3.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢掐隐,因為ArrayList要移動數(shù)據(jù)狗热。 這一點要看實際情況的。若只對單條數(shù)據(jù)插入或刪除虑省,ArrayList的速度反而優(yōu)于LinkedList匿刮。但若是批量隨機的插入刪除數(shù)據(jù),LinkedList的速度大大優(yōu)于ArrayList. 因為ArrayList每插入一條數(shù)據(jù)探颈,要移動插入點及之后的所有數(shù)據(jù)熟丸。
HashMap與TreeMap
1、 HashMap通過hashcode對其內(nèi)容進行快速查找伪节,而TreeMap中所有的元素都保持著某種固定的順序光羞,如果你需要得到一個有序的結(jié)果你就應(yīng)該使用TreeMap(HashMap中元素的排列順序是不固定的)。
2怀大、在Map 中插入纱兑、刪除和定位元素,HashMap是最好的選擇化借。但如果您要按自然順序或自定義順序遍歷鍵潜慎,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和 equals()的實現(xiàn)蓖康。
兩個map中的元素一樣铐炫,但順序不一樣,導(dǎo)致hashCode()不一樣蒜焊。
同樣做測試:
在HashMap中倒信,同樣的值的map,順序不同,equals時泳梆,false;
而在treeMap中鳖悠,同樣的值的map,順序不同,equals時唆迁,true,說明竞穷,treeMap在equals()時是整理了順序了的唐责。
HashTable與HashMap
1、Hashtable是線程安全的瘾带,而HashMap是線程不安全的
2鼠哥、HashMap允許存在一個為null的key,多個為null的value 看政。
3朴恳、hashtable的key和value都不允許為null。