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

Java 集合框架精華:Collections 工具類與排序機制深度解析

     編輯:Java 綜合教學

Collections 工具類核心功能

java.util.Collections 是集合框架的核心工具類,提供排序、搜尋、線程安全包裝等靜態方法,是操作集合對象的利器。

排序核心:sort() 方法

Collections.sort() 支援兩類列表排序:

  • 自然排序:列表元素實作 Comparable 介面(如 Integer、String、自訂類別)
  • 定制排序:傳入 Comparator 實例,適用無法修改類別或需多種排序規則的場景

Comparable vs Comparator 深度對比

特性ComparableComparator
定位內部比較器,定義預設自然順序外部比較器,定義臨時/多種規則
方法compareTo(T o)compare(T o1, T o2)
回傳值正數:大於、負數:小於、0:相等同左
適用場景類別擁有單一明確排序邏輯需多種排序、無法修改源碼、第三方類別

完整程式碼範例

實作 Comparable 的學生類別

public class Student implements Comparable<Student> {
    private String id;
    private String name;

    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }
    // getter/setter 省略...

    @Override
    public int compareTo(Student o) {
        return this.id.compareTo(o.id); // 按 ID 自然排序
    }
}

實作 Comparator 的姓名比較器

public class StudentComparator implements Comparator<Student> {
    @Override
    public int compare(Student s1, Student s2) {
        return s1.getName().compareTo(s2.getName()); // 按姓名排序
    }
}

測試類別展示三種排序場景

public class CollectionTest {
    // 1. Integer 列表自然排序
    public void testSort1() {
        List<Integer> list = new ArrayList<>();
        Random rand = new Random();
        for (int i = 0; i < 10; i++) {
            Integer k;
            do { k = rand.nextInt(100); } while (list.contains(k));
            list.add(k);
            System.out.println("新增:" + k);
        }
        System.out.println("排序前:" + list);
        Collections.sort(list);
        System.out.println("排序後:" + list);
    }

    // 2. String 列表自然排序
    public void testSort2() {
        List<String> list = Arrays.asList("del", "lenovo", "ios", "apple");
        System.out.println("排序前:" + list);
        Collections.sort(list);
        System.out.println("排序後:" + list);
    }

    // 3. 自訂物件:自然排序 + 定制排序
    public void testSort3() {
        List<Student> students = new ArrayList<>();
        Random rand = new Random();
        students.add(new Student(rand.nextInt(1000)+"", "小明"));
        students.add(new Student(rand.nextInt(1000)+"", "小紅"));
        students.add(new Student(rand.nextInt(1000)+"", "小兵"));
        students.add(new Student(rand.nextInt(1000)+"", "abcde"));

        System.out.println("原始順序:");
        students.forEach(s -> System.out.println(s.getId() + " " + s.getName()));

        Collections.sort(students); // 自然排序(按 ID)
        System.out.println("按 ID 排序後:");
        students.forEach(s -> System.out.println(s.getId() + " " + s.getName()));

        Collections.sort(students, new StudentComparator()); // 定制排序(按姓名)
        System.out.println("按姓名排序後:");
        students.forEach(s -> System.out.println(s.getId() + " " + s.getName()));
    }

    public static void main(String[] args) {
        new CollectionTest().testSort3();
    }
}

關鍵要點總結

  • Comparable 定義「是什麼順序」,Comparator 定義「怎麼比較」
  • 自然排序要求類別實作 Comparable,修改類別源碼
  • 定制排序靈活解耦,可為同一類別提供多種排序策略
  • 基本型別無法直接用於泛型,需使用包裝類別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved