set利用TreeSet来实现对象的排序

 这个只是代码演示:
具体请看:
TreeSet的底层分析http://ohgrateboy.javaeye.com/admin/blogs/475547
测试类代码:

Java代码 复制代码
  1. import java.util.Iterator;   
  2. import java.util.Set;   
  3. import java.util.TreeSet;   
  4. public class SetStudy {   
  5.     public static void main(String[] args){   
  6.         Set<Student> set=new TreeSet();   
  7.         set.add(new Student("xiaobai",18));   
  8.         set.add(new Student("zhangsan",20));   
  9.         set.add(new Student("xiaobai",18));   
  10.         Iterator<Student> it=set.iterator();   
  11.         while(it.hasNext()){   
  12.         System.out.println(" "+it.next().toString());   
  13.         }   
  14.     }   
  15. }  
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class SetStudy {
	public static void main(String[] args){
		Set<Student> set=new TreeSet();
		set.add(new Student("xiaobai",18));
		set.add(new Student("zhangsan",20));
		set.add(new Student("xiaobai",18));
		Iterator<Student> it=set.iterator();
		while(it.hasNext()){
		System.out.println(" "+it.next().toString());
		}
	}
}


Student类代码:
Student类中若没有实现Comparable接口在运行时就会抛出异常:

Java代码 复制代码
  1. Exception in thread "main" java.lang.ClassCastException: day16.Student   
  2.     at java.util.TreeMap.compare(TreeMap.java:1093)   
  3.     at java.util.TreeMap.put(TreeMap.java:465)   
  4.     at java.util.TreeSet.add(TreeSet.java:210)   
  5.     at day16.SetStudy.main(SetStudy.java:11)  
Exception in thread "main" java.lang.ClassCastException: day16.Student
	at java.util.TreeMap.compare(TreeMap.java:1093)
	at java.util.TreeMap.put(TreeMap.java:465)
	at java.util.TreeSet.add(TreeSet.java:210)
	at day16.SetStudy.main(SetStudy.java:11)

 

Java代码 复制代码
  1. public class Student implements Comparable{   
  2.     private String name;   
  3.     private int age;   
  4.     public Student(String name, int age) {   
  5.         super();   
  6.         this.name = name;   
  7.         this.age = age;   
  8.     }   
  9.     public String getName() {   
  10.         return name;   
  11.     }   
  12.     public void setName(String name) {   
  13.         this.name = name;   
  14.     }   
  15.     public int getAge() {   
  16.         return age;   
  17.     }   
  18.     public void setAge(int age) {   
  19.         this.age = age;   
  20.     }   
  21.     int i=0;   
  22.     public int hashCode(){   
  23.         System.out.println(this);   
  24.         return 1+(i++);   
  25.     }   
  26.     public boolean equals(Object obj){   
  27.         return this==obj;   
  28.     }   
  29.     public String toString() {   
  30.         return name+" "+String.valueOf(age);   
  31.     }   
  32.          //覆盖Comparable接口的compareTo方法   
  33.     public int compareTo(Object o) {   
  34.         Student obj=(Student)o;   
  35.         if(obj.getName().compareTo(this.getName())>0return -1;   
  36.         if(obj.getName().compareTo(this.getName())<0return 1;   
  37.         return this.age-obj.getAge() ;   
  38.     }   
  39.        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值