集合学习

MAP:

HashMap/ConcurrentHashMap

Hashtable

LinkedHashMap

TreeMap/ConcurrentSkipListMap(跳表实现)

 

IdentityHashMap,key只有严格 == 时才算相同,put相同的key才会覆盖,而不是相等时覆盖

EnumMap,Enum做为key,并且会根据key的自然顺序保存

WeakHashMap,key没有强引用时会被GC回收,健值都被从map中删除

WeakHashMap:

WeakReference是“弱键”实现的哈希表。它这个“弱键”的目的就是:实现对“键值对”的动态回收。当“弱键”不再被使用到时,GC会回收它,WeakReference也会将“弱键”对应的键值对删除。

 “弱键”是一个“弱引用(WeakReference)”,在Java中,WeakReference和ReferenceQueue 是联合使用的。在WeakHashMap中亦是如此:如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。 接着,WeakHashMap会根据“引用队列”,来删除“WeakHashMap中已被GC回收的‘弱键’对应的键值对”。
    另外,理解上面思想的重点是通过 expungeStaleEntries() 函数去理解。

https://www.cnblogs.com/skywang12345/p/3311092.html

 

http://www.cnblogs.com/kersen0815/p/5325434.html

 

LinkedHashMap

LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。

LinkedHashMap可以用来实现LRU (Least recently used, 最近最少使用)算法。

    实现时需要做两点:

    1.调用该构造方法并将accessOrder置为true,当accessOrder为true时,get方法和put方法都会调用recordAccess方法使得最近使用的Entry移到双向链表的末尾;

    2.覆盖方法removeEldestEntry,当put新元素当时候,此方法用来判断时map扩容还是LRU淘汰。应该处理成if(size() > maxSize) return true;

http://blog.youkuaiyun.com/justloveyou_/article/details/71713781

 

put操作时 将新增的节点,连接在链表的尾部

在执行get,put,remove方法后分别回调了HashMap为其预留的方法(覆盖)

void afterNodeAccess(Node<K,V> p) { }

void afterNodeInsertion(boolean evict) { }

void afterNodeRemoval(Node<K,V> p) { }

在这些方法里处理链表变化。

https://blog.youkuaiyun.com/zxt0601/article/details/77429150

 

Java堆结构PriorityQueue完全解析

PriorityQueue

优先队列, 逻辑结构是一棵完全二叉树(根结点存储最小值),存储结构其实是一个数组。

逻辑结构层次遍历的结果刚好是一个数组,从小到大。

PriorityQueue默认是一个小顶堆,然而可以通过传入自定义的Comparator函数来实现大顶堆:

PriorityQueue< Integer > queue = new PriorityQueue < Integer > (26, Collections.reverseOrder());

https://blog.youkuaiyun.com/u013309870/article/details/71189189

https://blog.youkuaiyun.com/kobejayandy/article/details/46832797

Java 集合系列目录

http://www.cnblogs.com/skywang12345/p/3323085.html

 

java.util.BitSet 位操作,set(N):将N位设置true

转载于:https://my.oschina.net/u/3705388/blog/1601336

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值