- 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 ]]
廣告