日期:2014-05-20  浏览次数:20785 次

学习集合的一点问题
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中的元素没有比较的需求,所以没错。