Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)

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算法都大概一样,所以性能不会有很大的差异。

 

原文地址:https://www.cnblogs.com/hebao0514/p/4866675.html