Student对象的TreeSet集合

img

package Test;

import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetDemo {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    TreeSet<Student> t = new TreeSet<Student>() ;
    Student S1 = new Student(1,"张1");
    Student S2 = new Student(2,"李4");
    Student S3 = new Student(3,"王5");
    Student S4 = new Student(3,"赵6");
    t.add(S1);
    t.add(S2);
    t.add(S3);
    t.add(S4);
    for(Student s:t) {
        System.out.println(s.toString());
    }
    }

}
class Student implements Comparator{
private int id;
private String name;
public Student(int id,String name) {
// TODO Auto-generated constructor stub
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return obj.equals(this.id);
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.id;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:"+id+",name:"+name;
}
@Override
public int compare(Student s1, Student s2) {
// TODO Auto-generated method stub
if(s1.id==s2.id) {
return 0;
}else if(s1.id>s2.id) {
return -1;
}else {
return 1;
}
}
}package Test;

import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetDemo {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    TreeSet<Student> t = new TreeSet<Student>() ;
    Student S1 = new Student(1,"张1");
    Student S2 = new Student(2,"李4");
    Student S3 = new Student(3,"王5");
    Student S4 = new Student(3,"赵6");
    t.add(S1);
    t.add(S2);
    t.add(S3);
    t.add(S4);
    for(Student s:t) {
        System.out.println(s.toString());
    }
    }

}
class Student implements Comparator{
private int id;
private String name;
public Student(int id,String name) {
// TODO Auto-generated constructor stub
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return obj.equals(this.id);
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.id;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:"+id+",name:"+name;
}
@Override
public int compare(Student s1, Student s2) {
// TODO Auto-generated method stub
if(s1.id==s2.id) {
return 0;
}else if(s1.id>s2.id) {
return -1;
}else {
return 1;
}
}
}

出现了问题:
Exception in thread "main" java.lang.ClassCastException: class Test.Student cannot be cast to class java.lang.Comparable (Test.Student is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
at java.base/java.util.TreeMap.compare(TreeMap.java:1291)
at java.base/java.util.TreeMap.put(TreeMap.java:536)
at java.base/java.util.TreeSet.add(TreeSet.java:255)
at Test.TreeSetDemo.main(TreeSetDemo.java:15)