Java8改進的HashMap和Hashtable實現類
HashMap和Hashtable都是Map介面的典型實現類,它們之間的關係完全類似於ArrayList和Vector的關係:Hashtable是一個古老的Map實現類,它從JDK1.0起就已經出現了,當它出現時,Java還沒有提供Map介面,所以它包含了兩個繁瑣的方法,即elements()(類似於Map介面定義的values()方法)和keys()(類似於Map介面定義的keySet()方法),現在很少使用這兩個方法(關於這兩個方法的用法請參考)
Java8改進了HashMap的實現,使用HashMap存在key衝突時依然具有較好的效能。
除此之外,Hashtable和HashMap存在兩點典型區別。
(1)Hashtable是一個執行緒安全的Map實現,但HashMap是執行緒不安全的實現,所以HashMap比Hashtable的效能高一點;但如果有多個執行緒訪問同一個Map物件時,使用Hashtable實現類會更好。
(2)Hashtable不允許使用null作為key和value,如果試圖把null放進Hashtable中,將會引發空指標異常;但HashMap可以使用null作為key或value。
由於HashMap裡的key不能重複,所以HashMap裡最多隻有一個key-value對的key為null,但可以有無數多個key-value對的value為null.
下面程式示範了用null值作為HashMap的key和value的情形。
package com.zhao.three;
import java.util.HashMap;
public class NullInHashMap {
public static void main(String[] args) {
HashMap hm=new HashMap<>();
hm.put(null, null);
hm.put(null, null);
hm.put("a", null);
System.out.println(hm);
}
}
上面程式試圖向HashMap中放入三個key-value對,其中第二行程式碼處無法將key-value對放入,因為Map中已經有一個key-value對的key為null值,所以無法再放入key為null值的key-value對。第三行程式碼處可以放入該key-value對,因為一個HashMap中可以有多個value為null值。編譯、執行上面程式,看到如下輸出結果;
相關文章
- Hashtable和HashMapHashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- C#中Hashtable和HashMap的區別C#HashMap
- java複習之HashMap和Hashtable的區別JavaHashMap
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- 【java】【Map】HashMap、Hashtable、CollectionsJavaHashMap
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- HashMap排序--Java8HashMap排序Java
- Hashtable/HashMap與key/value為null的關係HashMapNull
- HashTable實現程式碼分享
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- 10分鐘掌握ConcurrentHashMap 3分鐘清楚和HashMap、Hashtable的區別HashMap
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- HashMap的實現原理 HashMap底層實現,hashCode如何對應bucket?HashMap
- 簡單的 HashMap 實現HashMap
- 五分鐘看懂Hashtable原始碼以及與HashMap的區別原始碼HashMap
- 一文搞定HashMap的實現原理和麵試HashMap
- Java中HashMap的實現原理JavaHashMap
- 詳解 PHP 陣列的底層實現:HashTablePHP陣列
- 一文讀懂JDK7,8,9的hashmap,hashtable,concJDKHashMap
- 使用Mongoose類庫實現簡單的增刪改查Go
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- 為什麼hashtable不允許設定Null但是hashmap允許?NullHashMap
- HashMap底層實現原理HashMap
- HashMap原始碼實現分析HashMap原始碼
- 協同過濾的R語言實現及改進R語言
- Java集合詳解4:一文讀懂HashMap和HashTable的區別以及常見面試題JavaHashMap面試題
- 對HashMap的思考及手寫實現HashMap
- 帶你逐步實現簡易HashMap,助力理解Java HashMapHashMapJava
- HashMap類,Set介面。HashMap
- Java8 Optional類Java
- 通用mapper和分類實現APP
- HashMap設計原理與實現(下篇)200行帶你寫自己的HashMap!!!HashMap
- 講講Java8的Optional類Java
- 使用jupyter實現貓和狗的分類
- HashMap實現原理及原始碼分析HashMap原始碼
- HashMap 實現原理與原始碼分析HashMap原始碼