[Java笔试面试知识点自整理系列]HashMap,HashTable的区别

来源:互联网 发布:网络分层结构 编辑:程序博客网 时间:2024/06/05 14:11

a)   HashMap是HashTable的轻量级实现(非线程安全实现)。HashMap允许空(null)键(key)值(value),而HashTable不允许。

b)   HashMap把HashTable的contains方法去掉了,改成了containsvalue和containsKey

c)   HashMap是Java1.2引进的Mapinterface的一个实现,而HashTable则继承自Dictionary类。

d)   HashMap是非线程安全的,不支持线程的同步,需要提供额外的同步机制;

HashTable是线程安全的,不需要开发人员对其进行同步;

就效率而言,HashMap可能要高于HashTable。

e)   HashMap使用Iterator;HashTable使用Enumeration。

HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。

f)    HashMap中,hash数组的默认大小是16(一定是2的指数);

HashTable中,hash数组默认大小是11,增加方式是old x 2 + 1。

0 0
原创粉丝点击