集合学习

MAP:html

HashMap/ConcurrentHashMap

Hashtable

LinkedHashMap

TreeMap/ConcurrentSkipListMap(跳表实现)

 

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

EnumMap,Enum作为key,而且会根据key的天然顺序保存算法

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

WeakHashMap:

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增长了时间和空间上的开销,可是它经过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序能够是插入顺序,也能够是访问顺序。对象

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

 

Java堆结构PriorityQueue彻底解析

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

Java 集合系列目录

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

 

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

相关文章
相关标签/搜索