hashset添加元素的过程

本文详细阐述了哈希表(HashSet)的插入逻辑,包括哈希值计算、冲突解决策略(七上八下),以及Treeset的独特性——对自然排序和定制排序的处理。同时介绍了LinkedHashSet的特点和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • -我们向hashset中添加元素a,首先调用a所在类的hashcode方法,计算元素a的哈希值,此哈希值接着通过某种算法计算出在hashset底层数组中的存放(索引位置),判断此位置上是否已经有元素;

  • 如果此位置上没有其他元素,则添加成功–情况1

    • 如果此位置上有其它元素b(或以链表形式存在的多个元素),则比较a和b的hash值:
      • 如果hash值不同,则元素a添加成功–情况2
      • 通过hash值相同,进而需要调用a所在类的equals方法:
        • equals返回true,a添加失败
        • equals返回false,a添加成功–情况3

对于添加成功的情况2和3而言:元素a与已经存在指定索引位置上数据以链表的方式存储。

jdk7:a指向原来数组中的元素

jdk8:数组中的元素指向a

简称:七上八下

hashset底层:数组+链表

linkedhashset:

作为hashset的子类,在添加元素的同时,每个数据还委会了两个引用,记录此数据的前一个数据和后一个数据,对于频繁遍历的操作,效率高于hashset。

treeset:

  • 向treeset中添加的数据,要求时相同类的对象

  • 两种排序方式:自然排序(实现comparable接口)和定制排序

  • 自然排序中,比较两个对象是否相同的标准为:compareto返回0,不再是equals。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掉头发的王富贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值