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值。編譯、執行上面程式,看到如下輸出結果;
相關文章
- hashmap與Hashtable實現原理淺析HashMap
- Hashmap 和Hashtable的區別HashMap
- HashMap和Hashtable的區別HashMap
- Hashtable和HashMap的區別HashMap
- hashmap與hashtable的區別,以及實現hashmap的同步操作HashMap
- Java8 HashMap實現原理探究JavaHashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- 集合框架-HashMap和Hashtable的區別框架HashMap
- 關於HashMap和Hashtable的區別HashMap
- HashMap和Hashtable的詳細區別HashMap
- HashTable和HashMap的六點區別HashMap
- 深入淺出 Map 的實現(HashMap、HashTable、LinkedHashMap、TreeMap)HashMap
- C#中Hashtable和HashMap的區別C#HashMap
- Java中的HashMap和HashTable到底哪不同?JavaHashMap
- java複習之HashMap和Hashtable的區別JavaHashMap
- Java入門:Hashtable和HashMap的區別(轉)JavaHashMap
- HashMap 與HashTable的區別HashMap
- HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap區別HashMap
- HashMap、HashTable、HashSet詳解HashMap
- 【java】【Map】HashMap、Hashtable、CollectionsJavaHashMap
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- ConcurrentHashMap HashMap HashTable區別HashMap
- HashTable HashMap HashSet區別(java)HashMapJava
- javascript中的hashtable實現JavaScript
- Java入門學習- 理解List和HashMap和HashTable的用法和區別JavaHashMap
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- HashMap排序--Java8HashMap排序Java
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- Java的JDK下Hashtable與HashMap的區別JavaJDKHashMap
- Hashtable/HashMap與key/value為null的關係HashMapNull
- HashMap的實現原理HashMap
- HashTable實現程式碼分享
- Java集合面試題(03) Java中HashMap和HashTable之間區別Java面試題HashMap
- PHP7 中的 Hashtable 的實現PHP
- 簡單的 HashMap 實現HashMap
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap