HashMap 、 Hashtable 、 treeMap的用處以及他們之間的區別

1.HashMap的用法

HashMap實現了Map接口,繼承AbstractMap,它是基於哈希表的 Map 接口的實現(保證鍵的唯一性),

以key-value的形式存在

HashMap是引用數據類型
通過 new 關鍵字在 Heap 堆中申請空間
保存其中元素的空間,按照hash碼,預設好一個個的空間
這個空間就是 Hash Bucket(哈希桶)
每個桶有自己的Hash編號
一開始有少量的 Hash Bucket,
當程序試圖將一個 key-value(Entry) 放入 HashMap 中時,
程序首先根據該 key 的 hashCode() 返回值決定該 Entry 的Bucket位置,
如果該Bucket爲空,直接存放入該Bucket;

如果該Bucket不爲空,使用 equals 比較兩個Entry 的 Key;
    if(true){新 value 將覆蓋 Entry 原 value,key 不變}
    if(false){新 Entry 將與 Bucket中原 Entry 形成 Entry 鏈,
        而且新 Entry 位於 Entry 鏈的頭部}


Map集合的遍歷:  

Map集合的遍歷:
      1、通過內部類Entry進行遍歷
      2、通過迭代器進行遍歷,先獲得Entry的Set集合
      3、通過keySet方法獲得鍵的Set集合,通過遍歷鍵取值
      4、通過map.values()獲得所有值,但是不能獲得鍵

2.Hashtable的用法

Hashtable:是Map接口的另外一個實現類,和HashMap用法類似,亦有區別

Hashtable出現於JDK1.0,HashTable基於Dictionary
HashMap可以允許存在一個爲null的key和任意個爲null的value,但是HashTable中的key和value都不允許爲null

Hashtable的方法是同步的,而HashMap的方法不是同步的。

有人建議,涉及多線程使用時候,就使用Hashtable,沒有涉及時候就用HashMap.但是在Collections中有一個靜態方法

SynchronizedMap(),該方法創建了一個線程安全的Map對象,並且作爲一個封裝對象返回。所以通過Collections類中的

SynchronizedMap()的方法,我們是可以同步訪問潛在的HashMap的



3.treeMap用法

TreeMap:基於紅黑樹(Red-Black tree)的 NavigableMap實現。該映射根據其鍵的自然順序進行排序

或者根據創建映射時提供的 Comparator進行排序,具體取決於使用的構造方法。

TreeMap 是一個有序的key-value集合,它是通過紅黑樹實現的
TreeMap 繼承於AbstractMap,所以它是一個Map,即一個key-value集合
TreeMap 實現了NavigableMap接口,意味着它支持一系列的導航方法,比如返回有序的key集合
TreeMap 實現了Cloneable接口,意味着它能被克隆

TreeMap 實現了Java.io.Serializable接口,意味着它支持序列化

構造方法:


TreeMap支持排序:

1、TreeMap默認按鍵的自然順序升序進行排序

2、TreeMap按降序排列


注意:在進行降序排序時,要在構造集合時候傳遞一個比較器

HashMap  Hashtable  treeMap的原理以及區別

1.這三個都對Map接口進行了實現

2.HashMap是不安全的線程,他允許Key值出現一次null   Value值出現無數次的Null

3.Hashtable是安全的線程,他不僅實現了Map接口也實現了Dictionary接口,他的key值與Value值都不允許出現Null

4.treeMap是可以進行排序的,默認按照鍵的自然順序進行升序排序,若要進行降序排序則需要在構造集合時候傳遞一個比較器




                                                                                                                                                                               







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章