当前位置:   article > 正文

hashmap和hashset联系_hashset与hashmap联系

hashset与hashmap联系

Java最基本的两种数据结构:数组和链表的区别:

数组易于快速读取(通过for循环),不便存储(数组长度有限制);链表易于存储,不易于快速读取。

哈希表的出现是为了解决链表访问不快速的弱点,哈希表也称散列表。

HashSet是通过HasMap来实现的,HashMap的输入参数有Key、Value两个组成,在实现HashSet的时候,保持HashMap的Value为常量,相当于在HashMap中只对Key对象进行处理。

HashMap的底层是一个数组结构,数组中的每一项对应了一个链表,这种结构称“链表散列”的数据结构,即数组和链表的结合体;也叫散列表、哈希表。


HahMap存储对象的过程如下:

1、对HahMap的Key调用hashCode()方法,返回int值,即对应的hashCode;

2、把此hashCode作为哈希表的索引,查找哈希表的相应位置,若当前位置内容为NULL,则把hashMap的Key、Value包装成Entry数组,放入当前位置;

3、若当前位置内容不为空,则继续查找当前索引处存放的链表,利用equals方法,找到Key相同的Entry数组,则用当前Value去替换旧的Value;

4、若未找到与当前Key值相同的对象,则把当前位置的链表后移(Entry数组持有一个指向下一个元素的引用),把新的Entry数组放到链表表头;

HashMap的内存实现结构如下:


注意:在哈希表的数组结构中Entry对象已经超出0.75的容量,因此需要重新申请内存了。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/643911
推荐阅读
相关标签
  

闽ICP备14008679号