Java集合HashSet介绍

本文介绍了Java集合中的HashSet,它基于HashMap实现,不允许重复元素。HashSet内部使用K, V模式,其中V为Object。重写hashcode和equals方法至关重要,避免因只重写hashcode而导致的重复元素问题。当元素数量超过0.75*数组长度时,HashSet会进行扩容,链表节点数达到9时会树化。在JDK1.7中,多线程环境下可能导致链表死循环,但在JDK1.8中已通过尾插法避免此问题。" 132440556,19671270,C语言实现快速排序算法,"['排序算法', 'c语言', '编程', '算法实现']
摘要由CSDN通过智能技术生成

Set接口

HashSet

  • 底层HashMap

  • 实际上是K,V模式,只不过V放的是一个统一的Object

  • 可以存放null值,但是只能有一个null值

  • 不能有重复元素

  • 这里面需要考虑到hashcode与equals方法的重写

    如果放入Set集合的元素只重写hashcode而不重写equals,会导致重复元素添加,源码如下

  • 此时认为hashcode是相等的,这两个元素到同一个hash槽里面

    并且执行遍历链表寻找插入位置的操作。

  • 插入操作源码具体流程,首先调用map的put方法,put方法调用hash方法对key的hashcode再进行hash处理,以减少哈希碰撞,然后再调用putVal方法,将key和Object传入

  • putValue方法首先判断tab数组是否为空,如果为空则会调用resize方法去把table初始化,

    如果节点数量大于0.75*数组长度,则会进行扩容

    初始化完成之后寻找hash槽,并且插入,如果一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值