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

Java ArrayList 排序完整教學:Comparator 與 Comparable 實戰

     編輯:Java 相關知識

前言

Java 中對 ArrayList 進行排序,核心在於 Collections.sort() 搭配 Comparator 或實作 Comparable 介面。本文透過兩個完整範例,示範如何依年齡、姓名等欄位排序自訂物件。

範例一:Student 類別與多重排序策略

import java.util.*;

class Student {
    private String name;
    private int age;
    // 建構子、getter/setter 略
}

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

class SortByName implements Comparator<Student> {
    @Override
    public int compare(Student s1, Student s2) {
        return s1.getName().compareTo(s2.getName());
    }
}

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

        System.out.println("依年齡排序:");
        Collections.sort(list, new SortByAge());
        list.forEach(s -> System.out.println(s.getName() + " / " + s.getAge()));

        System.out.println("依姓名排序:");
        Collections.sort(list, new SortByName());
        list.forEach(s -> System.out.println(s.getName() + " / " + s.getAge()));
    }
}

範例二:Person 類別與獨立 Comparator 類別

class Person {
    String name;
    int age;
    // 建構子、getter/setter 略
}

class MyComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // 年齡降序
        return Integer.compare(p2.getAge(), p1.getAge());
    }
}

public class ListSort {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person("lcl", 28));
        list.add(new Person("fx", 23));
        list.add(new Person("wqx", 29));

        Collections.sort(list, new MyComparator());
        list.forEach(p -> System.out.println(p.getName() + " " + p.getAge()));
    }
}

關鍵點總結

  • Comparator:外部定義排序邏輯,一個類別可有多種排序方式。
  • Comparable:類別內部定義「自然順序」,只能有一種。
  • Java 8+ 可使用 Lambda 簡寫:list.sort(Comparator.comparing(Student::getAge))。
  • 基本型別或 String 列表可直接 Collections.sort(list)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved