Java : Set集合接口 (重复元素的判断)

在使用 TreeSet 子类进行数据保存的时候, 重复元素的判断依靠的是 Comparable 接口完成的, 且可以去掉重复元素.

在这里插入图片描述

但是, 当我们换成 HashSet 后, 重复数据并不会被去掉.

在这里插入图片描述

所以,由于 HashSet 子类与Comparable接口没有任何关系, 所以它判断重复的方式依赖的是 Object 类的两个方法: 这两个方法必须共同完成

1. hash 码 : public int hashCode();

2. 对象比较: public boolean equals(Object obj);

在java中进行对象比较的操作有两步: 第一步要通过一个对象的唯一编码找到一个对象的信息, 当编码匹配之后, 在调用 equals() 方法进行内容进行比较.

可以直接使用IDE工具自动生成
在这里插入图片描述
在这里插入图片描述

如果要标识出对象的唯一性, 一定要 hashCode() 和 equals() 两个方法一起出现.

面试题: 如果两个对象的 hashCode 相同, equals 不同, 结果是什么?

不能消除重复.

面试题: 如果两个对象的 hashCode 不同, equals 相同, 结果是什么?

不能消除重复

记住: 对象判断, 必须两个都要相同才可以实现.

在这里插入图片描述

总结:

在很多的时候使用 Set 的核心目的不是让其进行排序, 而是让其进行重复元素的过滤, 那么使用 TressSet 就没有意义了, 但是重复元素又需要依靠 hashCode() , equal() 两个方法, 所以如果不是必须的时候, 在使用 Set 接口的时候尽量用系统提供类实现, 例如: String , Integer.

个人的原则:

保存自定义类对象一定用 List 接口
保存系统类的信息的时候一定使用Set接口.

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_大木_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值