TreeSet集合排序兩種實現方式Comparable和Comparator比較
阿新 • • 發佈:2019-02-15
import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; /** * TreeSet集合排序有兩種方式,Comparable和Comparator區別: * 1:讓元素自身具備比較性,需要元素物件實現Comparable介面,覆蓋compareTo方法。 * 2:讓集合自身具備比較性,需要定義一個實現了Comparator介面的比較器,並覆蓋compare方法, * 並將該類物件作為實際引數傳遞給TreeSet集合的建構函式。 第二種方式較為靈活。 */ public class TreeSetDemo3 { public static void main(String[] args) { Teacher t1 = new Teacher(111L); Teacher t2 = new Teacher(222L); TreeSet<Teacher> teachers = new TreeSet<Teacher>(); teachers.add(t1); teachers.add(t2); for (Iterator<Teacher> iter = teachers.iterator(); iter.hasNext();) { Teacher t = iter.next(); System.out.println(t.getId()); } System.out.println("------------------------"); Student s1 = new Student(123L); Student s2 = new Student(456L); //讓集合自身具備比較性,這種方式較靈活 TreeSet<Student> students = new TreeSet<Student>(new StudentComparator()); students.add(s1); students.add(s2); for (Iterator<Student> iter = students.iterator(); iter.hasNext();) { Student s = iter.next(); System.out.println(s.getId()); } } } /** * 採用實現Comparable介面重寫compareTo方法的方式,讓元素自身具備比較性 * @author Administrator * */ class Teacher implements Comparable<Teacher>{ private Long id; public Teacher() { } public Teacher(Long id) { this.id = id; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public int compareTo(Teacher o) { return (int) (this.id - o.getId()); } } //學生類 class Student { private Long id; public Student() { } public Student(Long id) { this.id = id; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } } /** * 自定義定義一個實現了Comparator介面的比較器,並覆蓋compare方法 */ class StudentComparator implements Comparator<Student> { @Override public int compare(Student o1, Student o2) { return (int) (o1.getId() - o2.getId()); // 根據升序排序 } }