在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()' 的用法。