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一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值