- Java code
import java.util.*;public class TestCollection01 { public static void main(String[] args) { Collection c = new TreeSet<Stu>(); Stu s1 = new Stu("小红", 20); Stu s2 = new Stu("小明", 21); c.add(s1); c.add(s2); for(Iterator<Stu> it = c.iterator();it.hasNext();) { Stu s = it.next(); System.out.println(s.toString()); } }}class Stu { private String name; private int age; public Stu(String name,int age) { this.name = name; this.age = age; } public int hashCode() { return 1; } public String toString() { return "姓名:" + name +"年龄" + age; }}
- Java code
Exception in thread "main" java.lang.ClassCastException: com.test02.Stu cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source) at com.test02.TestCollection01.main(TestCollection01.java:8)
这个怎么错了,我把TreeSet换成HashSet就不错,arraylist和linkedlist也不错
------解决方案--------------------
因为TreeSet的实现是棵红黑树,遍历TreeSet会得到一个有序的序列,但你的Stu没有实现Comparable接口,它不知道如何比较两个Stu对象,所以出错。可以实现Comparable接口,实现里面的compareTo方法。
因为HashSet、ArrayList、LinkedList中的元素没有比较的需求,所以没错。