gpt4 book ai didi

java - 树集示例

转载 作者:行者123 更新时间:2023-12-02 07:50:30 25 4
gpt4 key购买 nike

为什么第三个对象没有被添加到这里的树集中,尽管它是一个不同的对象?

import java.util.*;

class Student implements Comparable<Student>{
public String fn,ln;
public Student(String fn,String ln){
this.fn=fn;
this.ln=ln;
}

//overiding equals

public boolean equals(Object o) {
if (!(o instanceof Student))
return false;
Student s=(Student) o;
if(this==s)
return true;
if(this.fn.equals(s.fn) && this.ln.equals(s.ln))
return true;
return false;
}

//overiding hashcode

public int hashCode() {
return fn.hashCode()+ln.hashCode();
}


//overiding compareTo

public int compareTo(Student o) {

return this.fn.compareTo(o.fn);
}
}

public class Practice {


public static void main(String[] args) {
Student st1=new Student("Girish","J");
Student st2=new Student("Master","M");
Student st3=new Student("Girish","Jay");
Set S=new TreeSet();

//adding 3 different student objects

System.out.println(S.add(st1));
System.out.println(S.add(st2));
System.out.println(S.add(st3));
Iterator sitr=S.iterator();
while(sitr.hasNext())
{
Student stu=(Student) sitr.next();
System.out.println(stu.fn+" "+stu.ln);
}


}

}

输出:

true
true
false
Girish J
Master M

最佳答案

您的比较器函数仅使用fn:

public int compareTo(Student o) {
return this.fn.compareTo(o.fn);
}

TreeSet 使用排序比较 - 它不使用 hashCode()equals()

通过比较,st1st3 相等(s1.compareTo(s3) 将返回 0),因此 st3 未添加到集合中。

如果您想保持区别,您可能应该比较 fn,然后在 fn 值相同时使用 ln:

public int compareTo(Student o) {
int fnResult = this.fn.compareTo(o.fn);
return fnResult == 0 ? ln.compareTo(o.ln) : fnResult;
}

关于java - 树集示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com