浅谈HashMap和HashTable的区别

作为高频面试题,本章浅谈一下HashMap、HashTable两者的区别

首先从HashMap的类注释上面就能大概知道两者的区别。

Hash table based implementation of the Map interface.  
This implementation provides all of the optional map operations, and permits null values and the null key.
 (The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls.)  
This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

上面这段英文是HashMap类注释上的第一段内容,意思是

HashMap是基于哈希表(散列表)的Map接口的实现。
这个实现类提供了所有可选的map操作,并允许空值和空键
HashMap类大致等同于Hashtable,除了它是非同步的并且允许空值
这个类不保证map的顺序;特别是,它不保证顺序会随着时间的推移保持不变。

由此,所以我们得出以下信息:

  • HashMap是非线程安全的;

  • HashMap的键和值都允许为null;

  • HashMap不能保证存的键值对的顺序。

总结:HashMap和HashTable的区别

  • HashMap是非线程安全的,HashTable是线程安全的;

  • HashMap的默认初始容量是16,HashTable的默认初始容量是11;

  • HashMap的键和值都允许为null,HashTable的键、值都不允许为null;

  • HashMap不能保证存的键值对的顺序,为了保证按照存入的顺序取出元素,可以使用LinkedHashMap。

HashMap HashTable
是否线程安全 ×
默认初始容量 16 11
最大容量 2^30 Integer.MAX_VALUE - 8
键是否允许为null ×
值是否允许为null ×

好了,这篇文章内容就那么多了,如有缺漏,欢迎补充,看完别忘了点赞+收藏~

你可能感兴趣的:(java,面试,HashMap,HashTable)