当前位置: 代码迷 >> J2SE >> 学习集合的一点有关问题
  详细解决方案

学习集合的一点有关问题

热度:27   发布时间:2016-04-24 02:07:04.0
学习集合的一点问题
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中的元素没有比较的需求,所以没错。
  相关解决方案