关于Java里的TreeSet判断重复元素。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java里的TreeSet判断重复元素。相关的知识,希望对你有一定的参考价值。
一直没搞懂TreeSet是怎么判断重复元素的,有人说是先调用compareTo()方法,如果返回0,就判断为重复元素。于是我写了一个学生类,下面是各种方法
//重写hashCode()
public int hashCode()
return this.num.hashCode();
//重写equal()
public boolean equals(Object o)
Student stu = (Student)o;
if(this.num.equals(stu.num) == true)
return true;
else
return false;
//重写compareTo(T o)
@Override
public int compareTo(Student stu)
float thisAllScore = this.getChinese()+this.getMath()+this.getEnglish();
float stuAllScore = stu.getChinese()+stu.getMath()+stu.getEnglish();
if(this.hashCode() == stu.hashCode())
return 0;
else if(this.equals(stu) == true)
return 0;
else if(thisAllScore < stuAllScore)
return 1;
else if(thisAllScore > stuAllScore)
return -1;
else
return 1;
然后添加5个Student
Student stu1 = new Student("张三", "01", 85.0f, 92.0f, 97.0f);
Student stu2 = new Student("李四", "02", 78.0f, 95.5f, 87.0f);
Student stu3 = new Student("王五", "03", 89.0f, 80.5f, 93.0f);
Student stu4 = new Student("李六", "04", 96.5f, 82.5f, 83.0f);
Student stu5 = new Student("李六", "04", 196.5f, 82.5f, 83.0f);
allStu.add(stu1);
allStu.add(stu2);
allStu.add(stu3);
allStu.add(stu4);
allStu.add(stu5);
输出结果
-----------------排名-----------------
|1|04|李六|196.5|82.5|83.0|362.0|
|2|01|张三|85.0|92.0|97.0|274.0|
|3|03|王五|89.0|80.5|93.0|262.5|
|4|04|李六|96.5|82.5|83.0|262.0|
|5|02|李四|78.0|95.5|87.0|260.5|
stu4.getNum().hashCode() = 1540
stu5.getNum().hashCode() = 1540
stu4.equals(stu5) = true
stu4跟stu5的num的哈希码相同,equals返回true.
但是还是同时出现了,这是为什么呢
allStu 是一个TreeSet的名字。复制少了
好吧,我承认复制了API。不过上面说得很清楚,compareTo()返回0才是被认为两个元素是相等吧。 参考技术A 很简单,这个问题其实很简单,判断是不是重复对象,应该判断他的所有属性是否一样,不单单是hashCode而已。 参考技术B 因为TreeSet需要排序而HashSet不需要,空的无法排序
以上是关于关于Java里的TreeSet判断重复元素。的主要内容,如果未能解决你的问题,请参考以下文章
Set集合,放的元素不能重复,请问它的判断重不重复是怎么实现的?