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

更新于:2023年5月12日

584 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告