集合框架-TreeSet集合
阿新 • • 發佈:2021-10-24
1 package cn.itcast.p5.treeset.demo; 2 3 import java.util.Iterator; 4 import java.util.TreeSet; 5 6 import cn.itcast.p.bean.Person; 7 8 public class TreeSetDemo { 9 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 // demo1(); 13 TreeSet ts = newTreeSetDemoTreeSet(/*new ComparatorByName()*/);//比較器排序優先於person的自然排序,實際開發比較器常用,person一般會實現comparator介面 14 /* 15 * 以Person物件的年齡進行從小到大的排序。 16 * 17 */ 18 ts.add(new Person("zhangsan",28)); 19 ts.add(new Person("wangwu",29)); 20 ts.add(new Person("lisi",21)); 21ts.add(new Person("zhouqi",29)); 22 ts.add(new Person("zhaoliu",25));//Person cannot be cast to class java.lang.Comparable 23 24 Iterator it = ts.iterator(); 25 26 while(it.hasNext()) { 27 Person p = (Person)it.next(); 28 29 System.out.println(p.getName()+":"+p.getAge());30 } 31 } 32 33 34 35 /** 36 * 37 */ 38 public static void demo1() { 39 TreeSet ts = new TreeSet(); 40 41 ts.add("abc"); 42 ts.add("zaa"); 43 ts.add("aa"); 44 ts.add("nba"); 45 ts.add("cba"); 46 47 Iterator it = ts.iterator(); 48 49 while(it.hasNext()) { 50 System.out.println(it.next()); 51 } 52 } 53 54 }
1 package cn.itcast.p.bean; 2 3 public class Person /*treeset用*/implements Comparable { 4 private String name; 5 private int age; 6 7 8 public Person() { 9 super(); 10 // TODO Auto-generated constructor stub 11 } 12 public Person(String name, int age) { 13 super(); 14 this.name = name; 15 this.age = age; 16 17 } 18 19 @Override 20 public int hashCode() { 21 System.out.println(this+".....hashCode"); 22 // TODO Auto-generated method stub 23 return name.hashCode()+age*27;//age後面乘以一個數增大離散程度,減少返回雜湊值相等的機率 24 //好比張三雜湊值20 年齡40 李四雜湊值30,年齡30 結果雜湊值一樣 25 //乘一個數後就不一樣了離散程度變大了 26 27 28 //return 100;//會比較equals 29 } 30 public boolean equals(Object obj) { 31 //健壯性 32 if (this == obj) {//有可能傳入相同的物件,可以先行判斷是否為同一物件add(p) add(p)這種傳入兩次 33 return true; 34 } 35 if (!(obj instanceof Person)) {//判斷是否為Person型別,型別不一致也不應該傳入 36 throw new ClassCastException("型別錯誤"); 37 } 38 39 // System.out.println(this+"...equals...."+obj); 40 Person p = (Person)obj; 41 42 43 return this.name.equals(p.name) && this.age == p.age; 44 } 45 public String getName() { 46 return name; 47 } 48 public void setName(String name) { 49 this.name = name; 50 } 51 public int getAge() { 52 return age; 53 } 54 public void setAge(int age) { 55 this.age = age; 56 } 57 //ctrl+alt+s 快捷構造set,get方法 初始化等 58 public String toString() { 59 return name+":"+age; 60 } 61 @Override 62 public int compareTo(Object o) {//物件的自然排序(treeset) 63 // TODO Auto-generated method stub 64 Person p = (Person)o; 65 int temp = this.age - p.age; 66 return temp==0?this.name.compareTo(p.name):temp;//主要條件次要條件,以年齡 67 68 // int temp = this.name.compareTo(p.name); 69 // return temp==0?this.age-p.age:temp;//以名字為主要條件 70 /* 71 * if (this.age>p.age) 72 * return 1; 73 * 74 * if (this.age<p.age) 75 * return -1; 76 * if (this.age == p.age) { 77 * return this.name.compareTo(p.name); 78 * } 79 */ 80 81 } 82 }Person
見集合框架TXT