Java HashSet:底层工作原理与实现机制

前言

在Java集合框架中,`HashSet` 是一个非常常用的数据结构,它提供了高效的元素存储和查找功能。作为一种集合,`HashSet` 允许我们存储不重复的元素,并且在平均情况下可以实现常数时间复杂度的插入和查找。这一切的背后,`HashSet` 依赖于 `HashMap` 来实现其底层机制。本文将深入探讨 `HashSet` 的工作原理,包括其如何通过计算哈希值来管理元素、如何处理碰撞以及在存储容量不足时的扩容机制。通过示例代码,我们将逐步解析 `add` 方法的具体实现过程,帮助读者更好地理解这一重要数据结构的运作方式。

HashSet底层机制1

public class HashSet_ {
    @SuppressWarnings("all")
    public static void main(String[] args) {
        HashSet hashSet = new HashSet();
        hashSet.add("jack");
        hashSet.add("tom");
        hashSet.add("jack");

    }
}

HashSet底层走的是HashMap()

public HashSet() {
    map = new HashMap<>();
}

执行add()方法 e就是你传入进的值,PRESENT是一个静态object()空方法,目的就是为了站位能够用到put()方法

public boolean add(E e) {
	return map.put(e, PRESENT)==null;//如果这里返回空就代表e这个值在这个并没有
}

传入的key就是上面的e,然后value就是PRESENT

public V put(K key, V value) {
    return putVal(hash(key), key, value, false, true); //如果这里返回空就代表成功了
}

求Key的hash值里面会到hashCode()方法,由于算法有点复杂就不追了,这个方法会得到key的hash值,但是这个hash值并不等价于hashCode,因为他里面还有算法

这个算法的设计可以理解为就是为了让key尽量得到不一样的hash值

static final int hash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明弟有理想

觉得有帮助可以投喂下博主~感谢

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

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

打赏作者

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

抵扣说明:

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

余额充值