1. HashMap和Hashtable区别 ?
• Hashtable:线程安全,效率低。不允许null键和null值
• HashMap:线程不安全,效率高。允许null键和null值
1 package cn.itcast_07; 2 3 import java.util.Hashtable; 4 5 /* 6 * 1:Hashtable和HashMap的区别? 7 * Hashtable:线程安全,效率低。不允许null键和null值 8 * HashMap:线程不安全,效率高。允许null键和null值 9 * 10 */ 11 public class HashtableDemo { 12 public static void main(String[] args) { 13 // HashMap<String, String> hm = new HashMap<String, String>(); 14 Hashtable<String, String> hm = new Hashtable<String, String>(); 15 16 hm.put("it001", "hello"); 17 // hm.put(null, "world"); //NullPointerException 18 // hm.put("java", null); // NullPointerException 19 20 System.out.println(hm); 21 } 22 }
2. HashMap和Hashtable区别总结:
Hashtable、HashMap都是Map接口的实现类。
(1)HashMap去掉了Hashtable的contains方法(容易产生歧义),但是加上了containsValue()和containsKey()方法。
(2)Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。
正因为如此,Hashtable是一个线程安全的Map实现,但是HashMap是线程不安全的Map实现,所以HashMap比Hashtable的性能高一点。但是如果是多个线程访问同一个Map对象的时候,使用Hashtable实现类会更好。
(3)HashMap允许空键值(key 和 value 都可以为null),而Hashtable不允许(key 和 value 都不可以为null)。
(4)Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。