Vector 是舊版同步化列表,現多建議使用 ArrayList。但若需維護舊代碼,仍可透過 Collections.sort(list, comparator) 進行排序。本文示範如何實作 Comparator 依物件欄位降序排列。
import java.util.*;
class Elem {
private int val;
public Elem(int v) { val = v; }
public int get() { return val; }
}
class MyCompare implements Comparator<Elem> {
@Override
public int compare(Elem e1, Elem e2) {
// 降序:大者在前
return Integer.compare(e2.get(), e1.get());
}
}
public class VectorSortDemo {
public static void main(String[] args) {
List<Elem> v = new Vector<>();
v.add(new Elem(1));
v.add(new Elem(22));
v.add(new Elem(3));
v.add(new Elem(14));
Collections.sort(v, new MyCompare());
v.forEach(e -> System.out.println(e.get()));
}
}
22 14 3 1
Comparator.compare(o1, o2) 回傳負值表示 o1 < o2(升序),正值表示 o1 > o2(降序)。Collections.sort(v, Comparator.comparing(Elem::get).reversed())。Vector 所有方法皆同步,多執行緒環境下無需額外加鎖,但效能較 ArrayList 低。