1 public class Person implements Comparable{ 2 private String name; 3 private int age; 4 5 public Person(){ 6 super(); 7 } 8 public Person(String name, int age) 9 { 10 super(); 11 this.name = name; 12 this.age = age; 13 } 14 15 16 @Override 17 public int hashCode() { 18 19 return name.hashCode()+age*27; 20 } 21 @Override 22 public boolean equals(Object obj) { 23 if (this == obj) 24 return true; 25 if (!(obj instanceof Person)) 26 throw new ClassCastException("類型錯誤"); 27 28 Person p = (Person) obj; 29 30 return this.name.equals(p.name) && this.age == p.age; 31 } 32 @Override 33 public String toString() { 34 35 return name+":"+age; 36 } 37 public String getName() { 38 return name; 39 } 40 public void setName(String name) { 41 this.name = name; 42 } 43 public int getAge() { 44 return age; 45 } 46 public void setAge(int age) { 47 this.age = age; 48 } 49 @Override 50 public int compareTo(Object o) { //先按年齡排,再按姓名排 51 52 Person p = (Person)o; 53 54 int temp = this.age - p.age; 55 56 return temp==0? this.name.compareTo(p.name):temp; 57 58 59 } 60 61 62 }
1 import java.util.Comparator; 2 3 import cn.itcast.p1.bean.Person; 4 5 public class ComparatorByName implements Comparator { //先按姓名排,再按年齡排 6 7 @Override 8 public int compare(Object o1, Object o2) { 9 Person p1 = (Person)o1; 10 Person p2 = (Person)o2; 11 12 int temp = p1.getName().compareTo(p2.getName()); 13 14 return temp==0?p1.getAge()-p2.getAge() : temp; 15 } 16 17 }
1 import java.util.Iterator; 2 import java.util.TreeSet; 3 4 import cn.itcast.p1.bean.Person; 5 import cn.itcast.p5.comparator.ComparatorByName; 6 7 public class TreeSetDemo { 8 9 public static void main(String[] args) { 10 // demo1(); 11 TreeSet ts = new TreeSet(new ComparatorByName()); //添加 new ComparatorByName(),會出現結果一,去除的話 ,出現結果2
//Comparator 優先於 Comparable
12 13 ts.add(new Person("zhangsan",28)); 14 ts.add(new Person("lisi",21)); 15 ts.add(new Person("zhouqi",29)); 16 ts.add(new Person("zhaoliu",25)); 17 ts.add(new Person("wangwu",24)); 18 ts.add(new Person("lisi",21)); 19 ts.add(new Person("zhouqi",29)); 20 21 Iterator it = ts.iterator(); 22 23 while (it.hasNext()) 24 { 25 Person p = (Person)it.next(); 26 27 System.out.println(p); 28 } 29 30 } 31 32 public static void demo1() { 33 TreeSet ts = new TreeSet(); 34 35 ts.add("abc"); 36 ts.add("zaa"); 37 ts.add("aa"); 38 ts.add("nba"); 39 ts.add("cba"); 40 41 Iterator it = ts.iterator(); 42 43 while (it.hasNext()) 44 { 45 System.out.println(it.next()); 46 } 47 } 48 49 }