Comparable
Comparable 是 java.lang 包下的一個排序介面,該介面對實現它的每個類的物件強加一個整體排序。 該排序稱為類的自然排序,類的compareTo方法稱為自然比較方法。
//定義Bean物件並實現Comparable介面
class Person implements Comparable<Object>{
private int id;
private String name;
....set、get、構造方法
@Override
public int compareTo(Object o) {
Person p = (Person)o;
return this.id-p.id;
}
}
複製程式碼
//比較輸出
public static void main(String[] args) {
ArrayList<Person> arrayList = new ArrayList<Person>();
// 不能寫成:Collection c = new ArrayList();
// 這會導致49行出錯,因為Collections.sort()接受的形參必須的是List介面型別的變數,
// Collections.sort()不能接受Collection型別的變數,這語法上編譯時是通不過的
arrayList.add(new Person(1000, "張思"));
arrayList.add(new Person(1002, "李四"));
arrayList.add(new Person(1001, "王五"));
arrayList.add(new Person(1004, "小娟"));
arrayList.add(new Person(1008, "老謝"));
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
java.util.Collections.sort(arrayList);//49行
System.out.println("排序之後的內容是:");
Iterator<Person> iterator = arrayList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
複製程式碼
Comparator
Comparator 是 java.util 包下的一個比較介面,我們若需要控制某個類的次序,而該類本身不支援排序(即沒有實現 Comparable 介面);那麼,我們可以建立一個“該類的比較器”來進行排序。這個“比較器”只需要實現 Comparator 介面即可。
//首先定義一個 Bean 物件
public class Student{
private int id;
private String name;
....set、get、構造方法
}
複製程式碼
//定義一個 MyComparator 類並實現 Comparator 介面
public class MyComparator implements Comparator<Student>{
@Override
public int compare(Student s1, Student s2) {
return s1.getId()-s2.getId();
}
}
複製程式碼
//對於Set集合的實現類,在主方法中做比較輸出
public static void main(String[] args) {
Set<Student> set = new TreeSet<Student>(new MyComparator());
set.add(new Student(1002, "張三"));
set.add(new Student(1001, "李四"));
set.add(new Student(1005, "王五"));
set.add(new Student(1004, "唐人"));
set.add(new Student(1008, "但丁"));
set.add(new Student(1007, "林俊杰"));
set.add(new Student(1009, "李逸"));
for (Student student : set) {
System.out.println(student);
}
}
複製程式碼
//對於List集合的實現類,在主方法中做比較輸出
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
list.add(new Student(1002, "張三"));
list.add(new Student(1001, "李四"));
list.add(new Student(1005, "熊志"));
list.add(new Student(1004, "唐人"));
list.add(new Student(1008, "但丁"));
list.add(new Student(1007, "林俊杰"));
list.add(new Student(1009, "李逸"));
Collections.sort(list, new MyComparator());//第一個引數須是List集合的實現類
Iterator<Student> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
複製程式碼