JAVA高階基礎(10)---TreeSet對自定義型別進行定製排序及增強for迴圈遍歷集合
阿新 • • 發佈:2018-11-26
TreeSet
自然排序
對於自定義型別,那麼要實現自然排序,需要去 Comparable 介面中的 compareTo 方法。在 compare To 方法中我們可以根據自己的業務要求,來實現自己的排序規則。
定製排序
在建立容器的時候,給TreeSet建立一個比較器。
建立比較器的方式:三種
- 通過自定義的外部類來實現比較器。
- 通過在容器的定義類中,來通過內部類來實現一個比較器
- 在建立容器的時候,在建立的過程中,通過匿名內部類來建立一個比較器
三種方式相比較而言,3 更好一些(程式的可讀性和維護性)。
package org.lanqiao.setDemo; public class Student { private String name; private Integer age; public Student() { } public Student(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
package org.lanqiao.setDemo; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; public class SetDemo { public static void main(String[] args) { Set set = new TreeSet(new Comparator() { @Override public int compare(Object o1, Object o2) { Student stu = (Student)o1; Student stus = (Student)o2; int res = stu.getAge().compareTo(stus.getAge()); if(res == 0 ) { res = stu.getName().compareTo(stus.getName()); } return res; } }); Student stu1 = new Student("張三",21); Student stu2 = new Student("李四",18); Student stu3 = new Student("王五",22); Student stu4 = new Student("趙六",18); set.add(stu1); set.add(stu2); set.add(stu3); set.add(stu4); // 使用迭代器對集合進行遍歷 Iterator iter = set.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); } System.out.println("-------------------"); // 使用增強for迴圈來進行集合的遍歷 jdk1.5 新特性 /* for(遍歷的集合中的每一個元素的型別 變數(識別符號):遍歷的物件(集合)) { } */ for(Object obj :set) {//Object obj = Student Student stu = (Student)obj; System.out.println(stu.getName()); } System.out.println("-------------------"); List list = new ArrayList(); list.add(1); list.add(2); list.add(3); for(Object obj : list) { System.out.println(obj); } System.out.println("-------------------"); int[] arr = {2,14,6,8,4,32}; for(int i :arr) { System.out.println(i); } } }