HashMap 和 HashTable 有何不同?
线程安全:HashTable 中的方法是同步的,而 HashMap 中的方法在默认情况下是
非同步的。在多线程并发的环境下,可以直接使用 HashTable,但是要使用 HashMap 的
话就要自己增加同步处理了。
继承关系: HashTable 是基于陈旧的 Dictionary 类继承来的。 HashMap 继承的
抽象类 AbstractMap 实现了 Map 接口。
允不允许 null 值: HashTable 中,key 和 value 都不允许出现 null 值,否则会抛出
NullPointerException 异常。 HashMap 中,null 可以作为键,这样的键只有一个;可
以有一个或多个键所对应的值为 null。
默认初始容量和扩容机制: HashTable 中的 hash 数组初始大小是 11,增加的方式
是 old*2+1。HashMap 中 hash 数组的默认大小是 16,而且一定是 2 的指数。原因参考
全网把 Map 中的 hash()分析的最透彻的文章,别无二家。-HollisChuang’s Blog。
哈希值的使用不同 : HashTable 直接使用对象的 hashCode。 HashMap 重新计
算 hash 值。
遍历方式的内部实现上不同 : Hashtable、HashMap 都使用了 Iterator。而由于
历史原因,Hashtable 还使用了 Enumeration 的方式 。 HashMap 实现 Iterator,支
持 fast-fail,Hashtable 的 Iterator 遍历支持 fast-fail,用 Enumeration 不支持 fast
-fail。
HashMap 和 HashTable 有何不同?
最新推荐文章于 2023-06-07 21:22:28 发布