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