分类:
2009-10-23 15:37:27
Set集合中的treeSet里面不但继承了Set中的方法还有一些自己的方法
注意,TreeSet集合有自然排序功能,即是对元素进行自然排序 同样用代码来进行解释: import java.util.*; package myPack class myTreeSet{ public static void main(String[] args){ TreeSet ts = new TreeSet(); ts.add("ax"); ts.add("nj"); ts.add("wz"); ts.add("cd"); for(Iterator it = ts.iterator();it.hasNext();){ System.out.println(it.next());}}} 显示结果为:ax cd nj wz由结果看出是对字母的自然顺序排序的。 但日常开发的用TreeSet用来装元素装的是自定义对象,现在就用它来装自定久对象 描述一个学生类 class Student{ private String name; private int age; Student(String name,int age){ this.name = name; this.age = age; } public String getName(){ return name;} public int getAge(){ return age;}public String toString(){ return name+"--"+age;}} //主函数 import java.util.*; package myPack class myTreeSet{ public static void main(String[] args){ TreeSet ts = new TreeSet(); ts.add(new Student("cd",30)); ts.add(new Student("au",23)); ts.add(new Student("io",21)); ts.add(new Student("ht",26)); for(Iterator it = ts.iterator();it.hasNext();){ System.out.println(it.next());}}} 其结果出错:Exception in thread "main" java.lang.ClassCastException: Student cannot be cast 报了个类转换异常,Student cannot be cast to java.lang.Comparable??这是为什么呢?但如果存入一个元素,又能正常运行,但一个以上就不行,这是因为TreeSet要对元素进行排序,而又找不到排序方法。 注意, TreeSet拥有自然排序功能,是它自我封装了一个排序方法。 注意,如果要正确实现 这是API文档中的一段话,所以自定义对象必须实现Comparable 接口,它里面有个CompareTo()方法。
所以自定义对象中必须实现Comparable 接口, class Student implements Comparable { private String name; private int age; Student(String name,int age){ this.name = name; this.age = age; } public String getName(){ return name;} public int getAge(){ return age;}public String toString(){ return name+"--"+age; public int CompareTo(Object obj){ Student s = (Student)obj; if(this.age>s.age) return 1; else if(this.age==s.age) return this.name.compareTo(s.name);//这里的compareTo方法是String中的,String已实现Comparable接口,按照字母顺序来排序的。它返回的也是int(1,,0,,-1)同时实现了对字母排序。比如,有年龄相同的姓名不相同的元素,那么就会按字母顺序来排,如果都一样,则就是同一元素 else return -1; } }} 总结:TreeSet有排序功能,所以自定义对象中必须实现Comparable 接口,并重写compareTo()方法, |