
- Java DSA 教程
- Java中的DSA - 首頁
- Java中的DSA - 概述
- Java中的DSA - 環境設定
- Java中的DSA - 演算法
- Java中的DSA - 資料結構
- Java中的DSA - 陣列
- Java中的DSA - 連結串列
- Java中的DSA - 雙向連結串列
- Java中的DSA - 迴圈連結串列
- Java中的DSA - 棧
- DSA - 表示式解析
- Java中的DSA - 佇列
- Java中的DSA - 優先佇列
- Java中的DSA - 樹
- Java中的DSA - 雜湊表
- Java中的DSA - 堆
- Java中的DSA - 圖
- Java中的DSA - 搜尋技術
- Java中的DSA - 排序技術
- Java中的DSA - 遞迴
- Java中的DSA - 有用資源
- Java中的DSA - 快速指南
- Java中的DSA - 有用資源
- Java中的DSA - 討論
Java中的DSA - 物件排序
使用java.util.Arrays.sort()方法可以輕鬆對Java物件進行排序。請考慮以下示例。
ObjectSortingDemo.java
package com.tutorialspoint.simplesort; public class ObjectSortingDemo { public static void main(String[] args){ /* array of String objects */ String[] employees = new String[] {"Robert", "Paul","John","Micheal" }; System.out.println("Unsorted Array : " + Arrays.toString(employees)); /* sort array in lexicographical order */ Arrays.sort(employees); System.out.println("Sorted Array : " + Arrays.toString(employees)); System.out.println(); } }
如果我們編譯並執行上述程式,則會產生以下結果
Unsorted Array : [Robert, Paul, John, Micheal] Sorted Array : [John, Micheal, Paul, Robert]
使用Comparable介面
為了排序物件,其類可以實現java.lang.Comparable介面。請考慮以下程式碼。
Employee.java
package com.tutorialspoint.simplesort; public class Employee implements Comparable<Employee> { private int employeeId; private String name; private String department; public Employee (int employeeId,String name, String department){ this.employeeId = employeeId; this.name = name; this.department = department; } @Override public int compareTo(Employee employee) { return employeeId - employee.employeeId; } public String getName(){ return name; } public String getDepartment(){ return department; } @Override public String toString() { return "\n[ " + employeeId +"," + name +"," + department +" ]"; } }
這裡Employee類實現了java.lang.Comparable介面,並具有compareTo()方法。Array.sort()使用歸併排序演算法,並使用此compareTo()方法來比較兩個物件,以便對作為引數傳遞的物件陣列進行排序。
ObjectSortingDemo.java
public class ObjectSortingDemo { public static void main(String[] args){ /* Use of Arrays.sort() method to sort array */ Employee[] employeesObjects = new Employee[] { new Employee(100, "Robert", "Finance"), new Employee(30, "Paul", "Finance"), new Employee(50, "John", "Finance"), new Employee(12, "Micheal", "Finance") }; System.out.println("Unsorted Array : " + Arrays.toString(employeesObjects)); Arrays.sort(employeesObjects); System.out.println(); System.out.println("Sorted Array by id: " + Arrays.toString(employeesObjects)); } }
如果我們編譯並執行上述程式,則會產生以下結果:
Unsorted Array : [ [ 100,Robert,Finance ], [ 30,Paul,Finance ], [ 50,John,Finance ], [ 12,Micheal,Finance ]] Sorted Array by id: [ [ 12,Micheal,Finance ], [ 30,Paul,Finance ], [ 50,John,Finance ], [ 100,Robert,Finance ]]
使用Comparator介面
使用java.util.Comparator介面可以讓我們精確控制物件的排序。正如我們在之前的示例中看到的,我們透過實現java.lang.Comparable介面設定了一個標準,即員工應該根據類中的compareTo()方法進行排序。使用Comparator類,如果一個類沒有實現Comparable介面,我們可以在不修改類的情況下設定一個標準。請考慮以下程式碼。
Employee.java
package com.tutorialspoint.simplesort; public class Employee { private int employeeId; private String name; private String department; public Employee (int employeeId,String name, String department){ this.employeeId = employeeId; this.name = name; this.department = department; } public String getName(){ return name; } public String getDepartment(){ return department; } @Override public String toString() { return "\n[ " + employeeId +"," + name +"," + department +" ]"; } }
定義一個可以根據員工姓名比較兩個員工的比較器。
EmployeeNameComparator.java
package com.tutorialspoint.simplesort; import java.util.Comparator; public class EmployeeNameComparator implements Comparator<Employee> { @Override public int compare(Employee employee1, Employee employee2) { return employee1.getName().compareTo(employee2.getName()); } }
這裡EmployeeNameComparator類實現了java.util.Comparator介面,並具有compare()方法。Array.sort()使用歸併排序演算法,並使用此compare()方法來比較兩個物件,以便對作為引數傳遞的物件陣列進行排序。
ObjectSortingDemo.java
public class ObjectSortingDemo { public static void main(String[] args){ /* Use of Arrays.sort() method to sort array */ Employee[] employeesObjects = new Employee[] { new Employee(100, "Robert", "Finance"), new Employee(30, "Paul", "Finance"), new Employee(50, "John", "Finance"), new Employee(12, "Micheal", "Finance") }; System.out.println("Unsorted Array : " + Arrays.toString(employeesObjects)); Arrays.sort(employeesObjects,new EmployeeNameComparator()); System.out.println(); System.out.println("Sorted Array by name: " + Arrays.toString(employeesObjects)); } }
如果我們編譯並執行上述程式,則會產生以下結果:
Unsorted Array : [ [ 100,Robert,Finance ], [ 30,Paul,Finance ], [ 50,John,Finance ], [ 12,Micheal,Finance ]] Sorted Array by name: [ [ 50,John,Finance ], [ 12,Micheal,Finance ], [ 30,Paul,Finance ], [ 100,Robert,Finance ]]
廣告