SET集合

一、Set集合如何过滤重复元素?

以hashSet为例, 添加了五个元素,有一个重复的,没有添加进去,主要是因为,hashSet调用的是hashMap,创建的Map对象,而由于Map是键值对key 和value 两部分组成,其中key是唯一的,而set集合使用Map对象,将自己的元素以键值对中的key存入,value以一个常量存入的。

更通俗一点来说,Set集合是通过判断存入元素的哈希值来判断的,如果哈希值不一样,则元素一定不一样,但是如果哈希值一样,也不能说两个元素一样,因此,这是就需要比较元素的内容(t通过equals方法)来判断元素是否一样了,

二、为什么重写hashCode()时,必须重写equals()?

因为,hashCode在底层保存的格式一个int整型数据,而int类型的范围【-2147483648,2147483647】,由于int范围有限,因此,当数据溢出是有可能两个元素 的哈希相等,但是其实两个元素不等,这时,就需要使用equals()来比较两个元素的内容,进一步判断元素是否相等,若返回true ,则相等同一元素,反之,则是不同元素。

因此,当需要比较两个对象是否相等时,我们就可以先使用 hashCode 进行比较,如果比较的结果是 true,那么就可以使用 equals 再次确认两个对象是否相等,如果比较的结果是 true,那么这两个对象就是相等的,否则其他情况就认为两个对象不相等。

三、为什么会产生哈希冲突?

因为,hashCode在底层保存的格式一个int整型数据,而int类型的范围【-2147483648,2147483647】,由于int范围有限,因此,当数据溢出是有可能两个元素 的哈希相等

例如:"重地","通话" 哈希相等,但是元素是不同的两个个体。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值