您的位置:首页 > 职场人生

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

2016-05-25 13:20 549 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: