欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

hashSet与treeSet的去重原理

发布时间:2025/3/12 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 hashSet与treeSet的去重原理 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

hashSet与treeSet的去重原理

1、TreeSet去重原理 :compareTo
可以实现排序及去重:如果compareTo返回0,说明是重复的,返回的是自己的某个属性和另一个对象的某个属性的差值,如果是负数,则往前面排,如果是正数,往后面排;
应用:放入TreeSet中的对象,类必须实现compareable接口,覆写其compareTo方法,根据自己的需要改变其排序及去重规则,比如职员类,根据其工资水平进行去重和排序 。

public class TestUser implements Comparable<TestUser>{...@Overridepublic int compareTo(TestUser testUser) {...return ...;} }TreeSet<TestUser> sets = new TreeSet<>(); //必须实现Comparable接口,否则会报错 sets.add(new TestUser());

2、hashSet去重原理:1,hashCode 2,equals是否相同

我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数

当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
如果没有哈希值相同的对象就直接存入集合,如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存

将自定义类的对象存入HashSet去重复 ◦类中必须重写hashCode()和equals()方法
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储。

总结

以上是生活随笔为你收集整理的hashSet与treeSet的去重原理的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。