在Java中通过实现Comparable接口排序自定义对象
Java 提供了各种排序算法和方法,可以帮助我们排序数组、列表或任何集合。Comparable 接口是一种额外的方法,当我们想要按其自然顺序排序自定义对象时非常有用。例如,它按字典顺序排序字符串,按数字顺序排序数字。此接口位于 'java.lang' 包中。
在这篇文章中,我们将通过示例学习 Comparable 接口的使用。此外,我们还将讨论 Collection 接口的一些方法和类,这些方法和类将帮助我们使用 Comparable 接口对自定义对象进行排序。
通过实现 Comparable 接口进行排序
Comparable 接口的语法
class nameOfclass implements Comparable<nameOfclass>
在进入程序之前,让我们了解一些类和方法。
compareTo() 方法
Comparable 接口只定义了一个名为 'compareTo' 的方法,可以重写该方法以对对象的集合进行排序。它赋予了比较一个类的对象自身的能力。当“this”对象等于传入的对象时返回 0,如果“this”对象大于传入的对象则返回正值,否则返回负值。
语法
compareTo( nameOfclass nameOfobject );
Collections.sort() 方法
Collection 接口的 'Collections' 类提供了一个名为 'Collections.sort()' 的静态方法,该方法可以对指定集合(如 ArrayList 或 LinkedList)的元素进行排序。它位于 'java.util' 包中。
语法
Collections.sort( nameOfcollection );
算法
步骤 1 − 我们将从导入 'java.util' 包开始,以便在程序中使用 'sort()' 方法。
步骤 2 − 创建一个实现 Comparable 接口的类 'Cart'。在其中,声明两个变量,并定义此类的构造函数以及两个参数 'item' 和 'price',类型分别为字符串和整数。
步骤 3 − 接下来,我们将使用 'toString()' 方法将对象的数据转换为字符串。然后,定义 'compareTo' 方法以及一个作为参数的 'Cart' 类对象,以将 'this' 对象与新创建的对象进行比较。
步骤 4 − 现在,在 main() 方法中,声明一个名为 'obj' 的集合类型 ArrayList 的 'Cart' 类对象,并使用名为 'add()' 的内置方法将对象详细信息存储到集合中。
步骤 5 − 最后,我们将 'obj' 作为参数传递给 'Collections.sort()' 方法以执行排序操作,并使用 for each 循环打印结果。
示例
import java.util.*;
public class Cart implements Comparable<Cart> {
String item;
double price;
Cart(String item, int price) {
// this keyword shows these variables belongs to constructor
this.item = item;
this.price = price;
}
// method for converting object into string
public String toString() {
return "Item: " + item + ", " + "Price: " + price;
}
// overriding method
public int compareTo(Cart comp) {
if(this.price > comp.price) {
return 1;
} else {
return -1;
}
}
public static void main(String[] args) {
// Declaring collection arraylist
List<Cart> obj = new ArrayList<>();
// Adding object to the collection
obj.add(new Cart("Rice", 59));
obj.add(new Cart("Milk", 60));
obj.add(new Cart("Bread", 45));
obj.add(new Cart("Peanut", 230));
obj.add(new Cart("Butter", 55));
System.out.println("The original Objects: ");
// to print unsorted list of objects
for(Cart print : obj) {
System.out.println(print);
}
Collections.sort(obj);
// Sorting the object
System.out.println("The newly sorted Objects: ");
// to print newly sorted list of objects
for(Cart print : obj) {
System.out.println(print);
}
}
}
输出
The original Objects: Item: Rice, Price: 59.0 Item: Milk, Price: 60.0 Item: Bread, Price: 45.0 Item: Peanut, Price: 230.0 Item: Butter, Price: 55.0 The newly sorted Objects: Item: Bread, Price: 45.0 Item: Butter, Price: 55.0 Item: Rice, Price: 59.0 Item: Milk, Price: 60.0 Item: Peanut, Price: 230.0
结论
在 Java 1.0 版本中,Comparable 接口首次引入并可在 'java.lang' 包中使用。通常,在此包中定义的类、方法和接口默认情况下可用,因此在使用前无需导入。本文解释了 Comparable 接口的实现,并且我们还了解了其内置方法 'compareTo()' 的用法。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP