此程序在没有引号的情况下正常工作(即通过实现Comparable接口)。 所以只是想看看Set是否会使用字段和打印的普通对象,然后我看到这个错误。
Exception in thread "main" java.lang.ClassCastException: GenericColl.ComparableStudent cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(TreeMap.java:1290) at java.util.TreeMap.put(TreeMap.java:538) at java.util.TreeSet.add(TreeSet.java:255) at GenericColl.ComparableStudent.main(ComparableStudent.java:42) Java Result: 1
`package GenericColl;
import java.util.Set;
import java.util.TreeSet;
public class ComparableStudent /*implements Comparable */ {
private String name;
private long id;
private double gpa;
@Override
public String toString() {
return "name=" + name + ", id=" + id + ", gpa=" + gpa;
}
public ComparableStudent(String name, long id, double gpa) {
this.name = name;
this.id = id;
this.gpa = gpa;
}
/*
public String getName() {
return this.name;
}
@Override
public int compareTo(ComparableStudent s) {
int result = this.name.compareTo(s.getName());
if (result > 0) {
return 1;
} else if (result < 0) {
return -1;
} else {
return 0;
}
}*/
public static void main(String... args) {
Set<ComparableStudent> Stu = new TreeSet<>();
Stu.add(new ComparableStudent("Catalina", 324, 5.6));
Stu.add(new ComparableStudent("Pauline", 373, 4.4));
Stu.add(new ComparableStudent("Arica", 322, 6.6));
Stu.stream().forEach((c) -> {
System.out.println(c);
});
}
}`
答案 0 :(得分:1)
TreeSet是一个有序的Set,这意味着为了对对象进行排序,需要Comparable接口。 TreeSet自动调用compareTo以了解在集合中添加新对象的位置。
检查TreeSet类的API文档http://docs.oracle.com/javase/7/docs/api/。