Collection --Queue --優先級隊列/數組實現的隊列 Map --WeakedHashMap
/ \ / \
List Set HashMap TreeMap
/ \ / \ |
ArrayList LinkedList HashSet TreeSet LinkedHashMap
|
LinkedHashSet
兩個可以進行比較的接口的區別:
Comparable:需要比較對象實現該接口,有CompareTo()方法。
Comparator:比較器,使比較器類實現該接口,將要比較的對象傳到這個實現類的對象中。
第二個更好一些,它相當於一個工具類,第一個對要比較的對象耦合度較高。
Collection:接口 里面包含常用的方法,add().remove() contains() isEmpty()等基礎方法。
List:元素在序列中,根據索引對序列特定位置進行操作,重寫的方法中要傳入索引index值。
Arraylist:底層是數組實現的List容器,查找效率高,默認容量是10,擴容1.5倍,在底層new一個1.5倍容量的數組進行擴容。
LinkedList:鏈表實現的,對刪除和存入效率很高。
Set:方法和Collection完全相同,確保容器內元素唯一,根據這個特性可以用來查找。
HashSet:HashSet底層持有一個HashMap,key就是存儲的值,value是統一的一個值,HashSet中的各種方法實際上是調用HashMap相應的方法實現的。
TreeSet:持有一個TreeMap。
LinkedHashSet:底層是LinkedHashMap。
Map:存儲的是鍵值對。
HashMap:層是Hash表來實現的Set,在add()方法中調用,contains()方法,cotains方法會根據對象的hashcode判斷在哪個桶內,然后調用equals方法和桶內其他元素比較如果相同就要插入失敗。
LinkedHashMap:底層是Hash表和雙向鏈表,繼承HashMap,持有的Entry類繼承了HashMap中的類,並且多了before,after兩個引用,分別指向hash表中自己節點的前驅和后繼,有序方式分為兩種,一種是插入時的順序,一種是訪問順序(通過get方法等),有一個標志位來切換兩種順序。
TreeMap:底層是紅黑樹實現的Map,樹的節點存儲的是Entry,遍歷時是有序的,順序是底層定義的比較器所比較的順序。
Hash表:桶的數量要選擇2的整數次冪,因為確定一個對象所在的桶需要使用,Hashcode%桶數得到,而除法和求余操作對於處理器來說是最慢的,而二的整數次冪可用掩碼代替除法。