對於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。