首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java ArrayList 自訂排序完整範例:依年齡與姓名排序

     編輯:Java 相關知識

Java ArrayList 自訂排序完整範例:依年齡與姓名排序

Java 集合框架的 ArrayList 本身不保證順序,但透過 Collections.sort() 搭配 Comparator 介面,即可實現靈活的自訂排序邏輯。本文以學生物件為例,示範如何依年齡與姓名進行排序。

領域模型:Student 類別

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // Getter / Setter 省略
    public String getName() { return name; }
    public int getAge() { return age; }
    @Override public String toString() { return name + " / " + age; }
}

比較器實作

1. 依年齡排序 (SortByAge)

class SortByAge implements Comparator {
    @Override
    public int compare(Student s1, Student s2) {
        return Integer.compare(s1.getAge(), s2.getAge()); // 升冪
    }
}

2. 依姓名排序 (SortByName)

class SortByName implements Comparator {
    @Override
    public int compare(Student s1, Student s2) {
        return s1.getName().compareTo(s2.getName()); // 字典序
    }
}

主程式測試

public class ArrayListSortDemo {
    public static void main(String[] args) {
        List students = new ArrayList<>();
        students.add(new Student("丁曉宇", 21));
        students.add(new Student("趙四", 22));
        students.add(new Student("張三", 11));
        students.add(new Student("劉武", 19));

        System.out.println("=== 依年齡排序 (升冪) ===");
        Collections.sort(students, new SortByAge());
        students.forEach(System.out::println);

        System.out.println("\n=== 依姓名排序 (字典序) ===");
        Collections.sort(students, new SortByName());
        students.forEach(System.out::println);
    }
}

Java 8+ Lambda 簡化寫法

無需額外建立類別,直接使用 Lambda 表達式:

// 依年齡排序
students.sort(Comparator.comparingInt(Student::getAge));

// 依姓名排序
students.sort(Comparator.comparing(Student::getName));

// 多重排序:先年齡再姓名
students.sort(Comparator.comparingInt(Student::getAge)
                        .thenComparing(Student::getName));

關鍵點總結

  • Collections.sort(list, comparator) 會**修改原列表** (in-place)。
  • Comparator 回傳負值、零、正值分別代表「小於、等於、大於」。
  • Java 8 引入 Comparator.comparing() 等靜態工廠方法,大幅減少樣板代碼。
  • 若物件實作 Comparable,可直接呼叫 Collections.sort(list) 使用自然排序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved