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是可以進行排序的,默認按照鍵的自然順序進行升序排序,若要進行降序排序則需要在構造集合時候傳遞一個比較器