1、基础篇--1.2Java集合-HashMap和HashTable的区别

HashMap和HashTable的区别

1.继承的父类不一样,HashMap继承的是AbstractMap类,HashTable继承的是Dictionary类,不过都实现了Map、Clone、Serializable三个接口。其中Dictionary类中注释说是一个被废弃的类,建议实现Map接口,以下图:java

* NOTE: This class is obsolete.  New implementations should

 * implement the Map interface, rather than extending this class.

2.HashTable key和value都不支持null,会抛出空指针异常;HashMap中key能够为null,这样的键只有这一个。算法

3.线程安全不一样,HashMap线程不安全,HashTable线程安全,可是性能低下不推荐。安全

4.遍历方式有区别,HashMap用的是fail-fast迭代器。性能

5.初始容量大小和每次扩充容量大小的不一样。Hashtable默认的初始大小为11,以后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。以后每次扩充,容量变为原来的2倍。建立时,若是给定了容量初始值,那么Hashtable会直接使用你给定的大小,而HashMap会将其扩充为2的幂次方大小。也就是说Hashtable会尽可能使用素数、奇数。而HashMap则老是使用2的幂做为哈希表的大小。this

之因此会有这样的不一样,是由于Hashtable和HashMap设计时的侧重点不一样。Hashtable的侧重点是哈希的结果更加均匀,使得哈希冲突减小。当哈希表的大小为素数时,简单的取模哈希的结果会更加均匀。而HashMap则更加关注hash的计算效率问题。在取模计算时,若是模数是2的幂,那么咱们能够直接使用位运算来获得结果,效率要大大高于作除法。HashMap为了加快hash的速度,将哈希表的大小固定为了2的幂。固然这引入了哈希分布不均匀的问题,因此HashMap为解决这问题,又对hash算法作了一些改动。这从而致使了Hashtable和HashMap的计算hash值的方法不一样 。.net

6.计算hash值的方法不一样线程

HashTable直接使用对象的HashCode,HashMap为了解决冲突比较多,计算HashCode后又进行了一些运算数据设计

https://blog.csdn.net/wangxing233/article/details/79452946指针

相关文章
相关标签/搜索