集合框架? ??
一、collection
collection接口是所有單列集合的根,然后被List、Set、queue、Stack四大集合繼承(容量:jdk1.8版本之前,初識容量,10,超過提升為1.5倍;1.8版本以后,初識容量為0,通過add(),初識容量為10,超過提升1.5倍)
?1、List (有序,可重復)
????????????1.1? Arraylist? 底層由數組實現,有序可重復,線程不安全,查找效率高
????????????1.2 LinkedList 底層由鏈表實現,有序可重復,線程不安全,增刪效率高
????????????1.3 Vector 線程安全的Arraylist (初始容量10,擴充時,2倍擴充)
?2、set(元素是無序的,不可以重復,沒有索引)
????????????2.1 HashSet:?底層數據結構是哈希表(存入對象時,先判斷hashCode()得到的值,如果一樣,再用equals方法比較,在相同就當做同一個元素,不同就在同一個位置上串聯存儲兩個元素),線程不安全,存取速度快
? ? ? ? ? ? 2.2 TreeSet :底層數據結構是二叉樹,線程不安全。可以對Set集合中的元素進行排序
?3、queue:先進先出可以考慮Queue隊列
?4、stack:先進后出可以考慮Stack,遞歸!!!!壓棧 ,彈棧
二、Map(雙列集合)
Map集合是一個接口,和Collection集合不同的是,它是雙列集合,也就是說他所存儲的是鍵值對。(其中鍵要求唯一,一個鍵不能對應多個值,Map集合沒有Iterator迭代器,如果需要迭代需要轉化為單列集合間接迭代)(初始容量為16,0.75時,擴充為原來2倍)
? ???????????1、HashMap:底層由數組+鏈表+紅黑樹實現,線程不安全,無序,鍵值可以為null,效率高。
?????????????2、ConcurrentHashMap:底層由數組+鏈表+紅黑樹實現,線程安全,無序,鍵值不可以為null(同步代碼塊)。
? ???????????3、HashTable:底層由數組+鏈表+紅黑樹實現,線程安全,已被取代(同步方法)
數據存儲時,通過key值得hashcode,計算出hash值,如果引發hash沖突,就在該數組位置引出鏈表,當鏈表數超過8,則變為紅黑樹,鏈表數小于6,變為數組+鏈表
三、迭代器
迭代器是針對單列集合使用的,底層主要有三個方法,hasnext()、tnext()、remove();