对于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。