这个只是代码演示:
具体请看:
TreeSet的底层分析http://ohgrateboy.javaeye.com/admin/blogs/475547
测试类代码:
- 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());
- }
- }
- }
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接口在运行时就会抛出异常:
- 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)
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)
- public class Student implements Comparable{
- private String name;
- private int age;
- public Student(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- int i=0;
- public int hashCode(){
- System.out.println(this);
- return 1+(i++);
- }
- public boolean equals(Object obj){
- return this==obj;
- }
- public String toString() {
- return name+" "+String.valueOf(age);
- }
- //覆盖Comparable接口的compareTo方法
- public int compareTo(Object o) {
- Student obj=(Student)o;
- if(obj.getName().compareTo(this.getName())>0) return -1;
- if(obj.getName().compareTo(this.getName())<0) return 1;
- return this.age-obj.getAge() ;
- }