1. 程式人生 > >List<T>的排序

List<T>的排序

system lean lec add tin ava turn == bean

對List<T>的排序,我們可以用到Java提供的方法Collections.sort(List<T> list)。

比如:

List<String> sList = new ArrayList<String>();
	sList.add("5");
	sList.add("2");
	sList.add("3");
	sList.add("c");
	sList.add("a");
	sList.add("b");
	Collections.sort(sList);
	System.out.println(sList);

顯示結果為:

[2, 3, 5, a, b, c]

對於Integer、String等類型,可以直接用該方法進行排序。

但是對於class我們也會有相應的規則去對其排序。

只需要class內實現comparable接口或創造一個comparator比較器。

實現Comparable接口:(需要覆蓋compareTo方法),通過Collections.sort(List<T>)即可

public class Student implements Comparable<Student> {
    int id;
    String name;
    @Override
    public int compareTo(Student t) {
        
int i=0; i = id - t.id; if(i == 0){ i = name.compareTo(t.name); } return i; } }

創造Comparator比較器:通過Collections.sort(sList, new StudentComparator())方式排序

public class StudentComparator implements Comparator<Student> {

    @Override
    public int compare(Student s1, Student s2) {
        
int i = 0; i = s1.getId() - s2.getId(); if(i == 0){ i = s1.getName().compareTo(s2.getName()); } return i; } }

兩種方式對比:Comparatable比較簡單,實現方法即可。Comparator沒有修改源代碼,可以實現更復雜的邏輯。

另外,通過common.collection.jar包可以通過 new BeanComparator("", "") 直接生成比較器。

@SuppressWarnings("unchecked")
    public static <T> void sort(List<T> list, String fieldName, boolean asc) {
        Comparator<?> cmp = ComparableComparator.getInstance();
        cmp = ComparatorUtils.nullLowComparator(cmp); // 允許null
        if (!asc) {
            cmp = ComparatorUtils.reversedComparator(cmp); // 逆序
        }
        Collections.sort(list, new BeanComparator(fieldName, cmp));
    }

List<T>的排序