TreeSet:能夠對元素按照某種規則進行排序。 * 排序有兩種方式 * A:自然排序 * B:比較器排序 * * TreeSet集合的特點:排序和唯一 * * 通過觀察TreeSet的add()方法,我們知道最終要看TreeMap的put()方法 A:自然排序 1 public class Tre ...
TreeSet:能夠對元素按照某種規則進行排序。
* 排序有兩種方式
* A:自然排序
* B:比較器排序
*
* TreeSet集合的特點:排序和唯一
*
* 通過觀察TreeSet的add()方法,我們知道最終要看TreeMap的put()方法
A:自然排序
1 public class TreeSetDemo { 2 public static void main(String[] args) { 3 // 創建集合對象 4 // 自然順序進行排序
//無參構造--自然排序
5 TreeSet<Integer> ts = new TreeSet<Integer>(); 6 7 // 創建元素並添加 8 // 20,18,23,22,17,24,19,18,24 9 ts.add(20); 10 ts.add(18); 11 ts.add(23); 12 ts.add(22); 13 ts.add(17); 14 ts.add(24); 15 ts.add(19); 16 ts.add(18); 17 ts.add(24); 18 19 // 遍歷 20 for (Integer i : ts) { 21 System.out.println(i); 22 } 23 } 24 }
學生類----存儲自定義對象
package Day17; //Comparable此介面強行對實現它的每個類的對象進行整體排序。這種排序被稱為類的自然排序, // 類的 compareTo 方法被稱為它的自然比較方法。 public class Student1 implements Comparable<Student1> { private String name; private int age; //構造 public Student1(){} public Student1(String name, int age) { 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; } //按照姓名的長度進行排序 //Comparable此介面強行對實現它的每個類的對象進行整體排序。這種排序被稱為類的自然排序, // 類的 compareTo 方法被稱為它的自然比較方法。
//重寫介面的compareTo方法
public int compareTo(Student1 m){
//首先進行姓名長度的比較 int num = this.name.length()-m.name.length(); //如果姓名長度相同再比較其姓名是否相同 int num2 = num==0? this.name.compareTo(m.name):num; //姓名長度相同==名字相同==再不其年齡是否相同 int num3 = num2==0?this.age-m.age:num2; return num3; } }
測試類---存儲自定義對象
package Day17; import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer; import java.util.TreeSet; //按照姓名的長度進行排序 public class Lx2 { public static void main(String[] args) { //創建TreeSet集合對象---給出泛型 =---無參構造自然排序
TreeSet<Student1> AA =new TreeSet<Student1>(); //創建學生類對象 Student1 A = new Student1("趙同剛哈哈",25); Student1 B = new Student1("王麗",25); System.out.println(A.compareTo(B)); Student1 C = new Student1("趙同剛哈哈",27); Student1 D = new Student1("王麗麗",25); Student1 E = new Student1("朱慶娜哈",24); Student1 F = new Student1("劉詩詩哈哈哈哈哈",25); Student1 G = new Student1("諸葛亮哈哈哈哈",28); //將學生類對象的數據添加到集合中 //添加時。add方法中就具有Comparable介面中的compareTo方法 //在學生類中進行對compareTo的重寫--制定輸出的標準 //此時的輸出標準是--姓名長度--姓名是否相同--年齡 AA.add(A); AA.add(B); AA.add(C); AA.add(D); AA.add(E); AA.add(F); AA.add(G); //遍歷輸出查看 for(Student1 e : AA ){ System.out.println(e.getName()+"---"+e.getAge()); } } }
TreeSet比較器排序
學生類
public class Student1{ private String name; private int age; //構造 public Student1(){} public Student1(String name, int age) { 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; }
實現類
package cn.itcast_07; import java.util.Comparator; public class MyComparator implements Comparator<Student> { @Override public int compare(Student s1, Student s2) { // int num = this.name.length() - s.name.length(); // this -- s1 // s -- s2 // 姓名長度 int num = s1.getName().length() - s2.getName().length(); // 姓名內容 int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num; // 年齡 int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2; return num3; } }
測試類
package cn.itcast_07; import java.util.Comparator; import java.util.TreeSet; /* * 需求:請按照姓名的長度排序 * * TreeSet集合保證元素排序和唯一性的原理 * 唯一性:是根據比較的返回是否是0來決定。 * 排序: * A:自然排序(元素具備比較性) * 讓元素所屬的類實現自然排序介面 Comparable * B:比較器排序(集合具備比較性) * 讓集合的構造方法接收一個比較器介面的子類對象 Comparator */ public class TreeSetDemo { public static void main(String[] args) { // 創建集合對象 // TreeSet<Student> ts = new TreeSet<Student>(); //自然排序 // public TreeSet(Comparator comparator) //比較器排序 // TreeSet<Student> ts = new TreeSet<Student>(new MyComparator()); // 如果一個方法的參數是介面,那麼真正要的是介面的實現類的對象 // 而匿名內部類就可以實現這個東西 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { // 姓名長度 int num = s1.getName().length() - s2.getName().length(); // 姓名內容 int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num; // 年齡 int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2; return num3; } }); // 創建元素 Student s1 = new Student("linqingxia", 27); Student s2 = new Student("zhangguorong", 29); Student s3 = new Student("wanglihong", 23); Student s4 = new Student("linqingxia", 27); Student s5 = new Student("liushishi", 22); Student s6 = new Student("wuqilong", 40); Student s7 = new Student("fengqingy", 22); Student s8 = new Student("linqingxia", 29); // 添加元素 ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); ts.add(s6); ts.add(s7); ts.add(s8); // 遍歷 for (Student s : ts) { System.out.println(s.getName() + "---" + s.getAge()); } } }