TreeSet实现了SortedSet也实现了Set,但它不是随便一个对象都能存储:
public class TreeSetTest {
public static void main(String[] args){
TreeSet tree = new TreeSet();
tree.add(new Pepole("zhangsan"));
tree.add(new Pepole("lisi"));
System.out.println(tree);
}
}
class Pepole{
int age;
String name;
public Pepole(String name){
this.name = name;
}
}
执行上面的代码会得到下面的异常信息:
Exception in thread "main" java.lang.ClassCastException: my.set.Pepole cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(TreeMap.java:542)
at java.util.TreeSet.add(TreeSet.java:238)
at my.set.TreeSetTest.main(TreeSetTest.java:10)
上面的异常出现在往TreeSet里放第二个对象时报的异常,放置第一个的时候没有问题。
放置第二个对象时会用第二对象和TreeSet里的对象进行比较,看是否重复;然而我们自己定义的Pepole没有指定排序规则,所以会抛出异常。
查看TreeSet的add方法可以发现其有这么一个提示:
ClassCastException
- 如果指定对象无法与此 set 的当前元素进行比较
转载于:https://blog.51cto.com/zlfwmm/1709828