java collection库

来源:互联网 发布:拼音软件下载排行 编辑:程序博客网 时间:2024/06/05 13:33

对于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一致。
0 0
原创粉丝点击