java collection庫

對於java程序員來說,除了會語法外,最基本的就是對JDK的學習了,JDK組成如下:

jdk = jre + bin(dev util)

jre = jvm + lib(rt.jar)

 

我們平常用的java類庫就時rt.jar裏的runtime類庫了。

下面我們來學習下最常用的java.util裏的類:

 

Map

--------HashMap

先來學習下大家最常用到hashmap,在jdk6中,就是個鏈表的數組。

Node[] table 每個Node裏都有個Node next, 就是個linkList。

如果不設置,table的初始大小爲16, 當數據過多時會按2倍擴容。

每個entry會按key的hash值模table的size放入列表中。

複雜度從1到n.

jdk8中,如果一個鏈表的長度超過8,會把node換成TreeNode,紅黑樹,

複雜度從1到 log n.

--------LinkedHashMap

基於HashMap, 多了3個字段:

Node head;

Node tail;

boolean accessOrder;

Node多了befor和after倆個Node;

所以可以按insertOrder或accessOrder,把所有的node都link起來,遍歷時將從head開始,訪問每個after。

--------TreeMap

對於 TreeMap 而言,由於它底層採用一棵“紅黑樹”來保存集合中的 Entry,複雜度是 log n。

但 TreeMap比 HashMap在於,TreeMap 中所有元素總是根據指定排序規則保持有序狀態。

紅黑樹是一種平衡二叉樹的具體實現,在put方法中添加了fixAfterInsertion(e), remove方法中添加 fixAfterDeletion(e) 來保持樹的平衡。

具體來說,在樹左邊發生節點多時,進行一次左旋轉,改變根節點。

 

list比較簡單,基本上就是array, linkedList。

set 的底層就是用map實現的,所以類型和map一致。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章