转载请注明链接:https://blog.youkuaiyun.com/feather_wch/article/details/82500561
Map详解
版本号: 2018/9/7-1(18:18)
问题汇总
Hashtable和HashMap
11、Hashtable和HashMap的区别
- 作者:
HashMap
的作者比Hashtable
的作者多了一个人:Doug Lea
写了util.concurrent
包并且著有并发编程圣经:Concurrent Programming in Java
- 诞生时间:
HashMap
产生于JDK1.2
相比于Hashtable
更晚。- 弃用状况:
Hashtable
基本上已经被弃用:1-Hashtable
是线程安全
,效率比较低。2-Hashtable
没有遵循驼峰命名法
- 父类:
HashMap
继承自AbstractMap
,Hashtable
继承自Dictionary
- 接口数量:
Hashtable
比HashMap
多剔红了两个接口
:elements和contains- key和value是否为null:
Hashtable
不允许key和value
为NULL
,HashMap
支持:key=null的键只能有一个
,get()返回为null,可能是value为null,也可能是没有该key,需要通过containKey来判断是否具有某个key
- 线程安全性-
Hashtable
是线程安全(每个方法都加入Synchronized)
,HashMap
是非线程安全
的。HashMap
效率比Hashtable
高很多,而且需要自己进行同步处理。如果需要线程安全
可以使用ConcurrentHashMap
,也比Hashtable
效率高很多倍。- 遍历方式-
Hashtable
使用老旧的Enumeration
的方式,HashMap
使用Iterator迭代器
- 初始容量和扩容方式:
Hashtable初始为11
,扩容是2 * n + 1
,HashMap初始为16
,扩容是2 * n
- 计算
hash值
的方式不同:HashMap
比Hashtable
的计算效率更高。(涉及到位运算,以及通过额外计算打散数据来减少hash冲突的问题)
相同1: 两者都实现了:Cloneable(可复制)、Serializable(可序列化)