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

Java ArrayList 依物件屬性排序完整實作指南

     編輯:Java 相關知識

前言

在 Java 開發中,經常需要對 ArrayList 中的自訂物件進行排序。本文將透過完整的程式碼範例,示範如何根據物件的 int 型別與 String 型別屬性進行排序,並提供多種實作方式供參考。

1. 定義資料模型:Student Bean

首先建立一個簡單的 Student 類別,包含年齡、姓名與體重三個屬性:

public class Student {
    private int age;
    private String name;
    private String weight;

    public String getWeight() { return weight; }
    public void setWeight(String weight) { this.weight = weight; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

2. 依 int 型別屬性排序(年齡)

使用 Collections.sort() 搭配自訂 Comparator 實現依年齡升冪排序:

@SuppressWarnings("unchecked")
public static void sortIntMethod(List list) {
    Collections.sort(list, new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            Student stu1 = (Student) o1;
            Student stu2 = (Student) o2;
            if (stu1.getAge() > stu2.getAge()) return 1;
            else if (stu1.getAge() == stu2.getAge()) return 0;
            else return -1;
        }
    });
    printList(list);
}

3. 依 String 型別屬性排序(姓名)

方法一:直接使用 String.compareTo()

@SuppressWarnings("unchecked")
public static void sortStringMethod(List list) {
    Collections.sort(list, new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            Student stu1 = (Student) o1;
            Student stu2 = (Student) o2;
            return stu1.getName().compareTo(stu2.getName());
        }
    });
    printList(list);
}

方法二:使用 RuleBasedCollator 支援中文排序

若需依中文拼音或筆畫排序,可使用 java.text.RuleBasedCollator:

@SuppressWarnings("unchecked")
public static void sortByRuleBasedCollator(List list) {
    Collections.sort(list, new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            return ((RuleBasedCollator) Collator.getInstance(Locale.CHINA))
                    .compare(((Student) o1).getName(), ((Student) o2).getName());
        }
    });
    printList(list);
}

4. 測試程式碼

@SuppressWarnings("unchecked")
public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add(new Student(35, "wanglei"));
    list.add(new Student(4, "lisi"));
    list.add(new Student(56, "zhonghua"));
    list.add(new Student(39, "waanglei"));

    System.out.println("排序前:");
    printList(list);

    sortIntMethod(list);        // 依年齡排序
    sortStringMethod(list);     // 依姓名排序
}

private static void printList(List list) {
    for (int i = 0; i < list.size(); i++) {
        Student st = (Student) list.get(i);
        System.out.println("age=" + st.getAge() + ", name=" + st.getName());
    }
}

5. 執行結果說明

  • 依年齡排序後:4(lisi) → 35(wanglei) → 39(waanglei) → 56(zhonghua)
  • 依姓名排序後:lisi → waanglei → wanglei → zhonghua(按 ASCII 碼順序)
  • 使用 RuleBasedCollator 可獲得符合中文習慣的排序結果

小結

本文展示了三種常見的 List 排序方式,開發者可根據資料型別與業務需求選擇適當方案。實務上建議搭配泛型使用(如 List<Student>)以提升型別安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved