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