MAP:html
IdentityHashMap,key只有严格 == 时才算相同,put相同的key才会覆盖,而不是相等时覆盖java
EnumMap,Enum作为key,而且会根据key的天然顺序保存算法
WeakHashMap,key没有强引用时会被GC回收,健值都被从map中删除数组
WeakReference是“弱键”实现的哈希表。它这个“弱键”的目的就是:实现对“键值对”的动态回收。当“弱键”再也不被使用到时,GC会回收它,WeakReference也会将“弱键”对应的键值对删除。函数
“弱键”是一个“弱引用(WeakReference)”,在Java中,WeakReference和ReferenceQueue 是联合使用的。在WeakHashMap中亦是如此:若是弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。 接着,WeakHashMap会根据“引用队列”,来删除“WeakHashMap中已被GC回收的‘弱键’对应的键值对”。
另外,理解上面思想的重点是经过 expungeStaleEntries() 函数去理解。spa
https://www.cnblogs.com/skywang12345/p/3311092.html.net
http://www.cnblogs.com/kersen0815/p/5325434.htmlhtm
LinkedHashMap增长了时间和空间上的开销,可是它经过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序能够是插入顺序,也能够是访问顺序。对象
LinkedHashMap能够用来实现LRU (Least recently used, 最近最少使用)算法。blog
实现时须要作两点:
1.调用该构造方法并将accessOrder置为true,当accessOrder为true时,get方法和put方法都会调用recordAccess方法使得最近使用的Entry移到双向链表的末尾;
2.覆盖方法removeEldestEntry,当put新元素当时候,此方法用来判断时map扩容仍是LRU淘汰。应该处理成if(size() > maxSize) return true;
http://blog.csdn.net/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.csdn.net/zxt0601/article/details/77429150
PriorityQueue
优先队列, 逻辑结构是一棵彻底二叉树(根结点存储最小值),存储结构实际上是一个数组。
逻辑结构层次遍历的结果恰好是一个数组,从小到大。
PriorityQueue默认是一个小顶堆,然而能够经过传入自定义的Comparator函数来实现大顶堆:
PriorityQueue< Integer > queue = new PriorityQueue < Integer > (26, Collections.reverseOrder());
https://blog.csdn.net/u013309870/article/details/71189189
https://blog.csdn.net/kobejayandy/article/details/46832797
http://www.cnblogs.com/skywang12345/p/3323085.html
java.util.BitSet 位操做,set(N):将N位设置true