Java 通过实现Comparable接口对自定义对象进行排序

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。在其中,声明两个变量,并定义一个带有两个参数itemprice的构造函数,类型分别为字符串和整数。

  • 步骤 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版本中,引入了可比较接口并在“java.lang”包中提供。通常,此包中定义的类、方法和接口都默认可供我们使用,因此在使用之前导入它们并不重要。本文介绍了可比较接口的实现,并且我们还发现了其内置方法“compareTo()”的用法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程