Java容器来一发(四)HashMap

1、HashMap基本实现

HashMap 的基本数据结构是Entry<K,V>[] table。

HashMap在JDK1.8后把基于数组+红黑树,提高查找效率。

2、HashMap原理

利用key的hashCode重新hash计算出当前对象的元素在数组中的下标。

存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中。

获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。

HashMap是如何解决hash冲突的问题,核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比。

3、HashMap性能

HashMap有两个参数影响其性能:容量和加载因子。

当哈希表中的条目超过二者乘积时,哈希表进行rehash操作,哈希表桶数加倍。加载因子衡量散列表的空间使用程度,越大表示散列表的装填程度越高。加载因子越大,对空间利用越充分,但查找效率越低;加载因子越小,则散列表数据过于稀疏,空间浪费。

4、与HashTable的区别

两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些。

猜你喜欢

转载自blog.csdn.net/ss1300460973/article/details/85630896