集合學習

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

相關文章
相關標籤/搜索