[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。
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。
相关文章推荐
- iOS经典面试题
- 二叉树常考面试题
- 为什么找不到工作的是你,技术差的还是你
- 笔试面试题15--作业调度算法
- 40个重要的HTML 5面试问题及答案
- 前端程序员必知的30个Chrome扩展
- 笔试面试题14---.h/.exe/.lib/.dll文件
- String str=new String("123"); 经典面试题再解析
- 关于JSON的简介及取值以及常见面试题
- 程序员求职面试三部曲之二:提高面试的成功率
- 开发者应警惕的七种糟糕职业规划错误
- 你值得不迷惘的职场
- 这些HTML、CSS知识点,面试和平时开发都需要 No10-No11
- 笔试面试问题整理
- 一些面试题
- 程序员转管理之路
- 黑马程序员——java基础---位移运算符和键盘录入和switch语句
- 超级简单的理解kmp算法中的next的计算
- log4j 配置详解实例
- CMPP,SGIP,SMGP 长短信 消息头