使用Java的Comparable和Comparator接口排序三元组数组


在本文中,我们将创建一个三元组数组,并尝试使用Comparable和Comparator接口对其进行排序。三元组数组是指包含三个元素的数组。

一个数组是一种线性数据结构,用于存储具有相似数据类型的元素组。它以顺序方式存储数据。一旦我们创建了一个数组,我们就无法改变其大小,即它是固定长度的。

使用Comparator排序三元组数组

顾名思义,Comparator用于比较某些东西。在Java中,Comparator是一个接口,用于排序自定义对象。我们可以在其名为compare()的内置方法中编写我们自己的逻辑来排序指定的对象。此方法接受两个对象作为参数,然后返回一个整数值。通过这个整数值,Comparator决定哪个对象更大。

语法

Comparator< TypeOfComparator > nameOfComparator = new Comparator< TypeOfComparator >() {
	compare( type object1, type object1 ) {
		// logic for comparison
	}
};  

将用于排序操作的nameOfComparator传递给Arrays.sort()方法。

Arrays.sort()

它是Arrays类的静态方法,它接受一个参数并相应地对其元素进行排序。此方法可以排序数值数据类型的数组,例如整数或双精度数,甚至字符数组、字符串数组。

语法

Arrays.sort(nameOfarray);

示例

在这个例子中,创建一个比较器,并在其中覆盖其compare()方法,该方法将包含排序逻辑。然后,创建一个三元组数组,并使用内置方法Array.sort()对其进行排序。

import java.util.*;
class Cart {
   String item;
   double price;
   int quant;
   Cart(String item, int price, int quant) { // Constructor
      this.item = item;
      this.price = price;
      this.quant = quant;
   }
}
public class AraySort {
   public static void main(String args[]) {
      // use of comparator interface
      Comparator<Cart> comp = new Comparator<Cart>() {
         // logic to sort
         public int compare(Cart i, Cart j) {
            if(i.quant > j.quant) {
               return 1;
            } else {
               return -1;
            }
         }
      };
      // creating triplet of array
      Cart[] obj = new Cart[3]; 
      obj[0] = new Cart("Rice", 59, 5);
      obj[1] = new Cart("Milk", 60, 2);
      obj[2] = new Cart("Bread", 45, 1);
      Arrays.sort(obj, comp); 
      // to sort
      System.out.println("Elements of the newly sorted array: ");
	   for(int i = 0; i < obj.length; i++) {
         System.out.println("Item: " + obj[i].item + ", " + "Price: " + obj[i].price + ", " + "Quantity: " + obj[i].quant);	
      }
	}
}

上述代码的输出如下:

Elements of the newly sorted array: 
Item: Bread, Price: 45.0, Quantity: 1
Item: Milk, Price: 60.0, Quantity: 2
Item: Rice, Price: 59.0, Quantity: 5

使用Comparable排序三元组数组

当我们想按其自然顺序排序自定义对象时,Comparable接口非常有用。例如,它按字典顺序排序字符串,按数字顺序排序数字。此接口位于java.lang包中。

语法

class nameOfclass implements Comparable<nameOfclass>

这里,class是创建类的关键字,implements是启用使用接口提供的功能的关键字。

compareTo()

Comparable接口只定义了一个名为CompareTo()的方法,可以重写该方法以对对象的集合进行排序。它赋予了将类的对象与其自身进行比较的能力。当this对象等于传递的对象时,它返回0;如果this对象更大,则返回正值;否则返回负值。

语法

compareTo(nameOfclass nameOfobject);

示例

以下Java程序演示了如何使用Comparable接口对三元组数组进行排序。在这里,创建一个实现Comparable接口的类。在其compareTo()方法中定义排序逻辑。然后,在main方法中,创建一个三元组数组,并使用Array.sort()方法对其进行排序。

import java.util.*;
public class Cart implements Comparable<Cart>{
   String item;
   double price;
   int quant;
   Cart(String item, int price, int quant) { 
      // Constructor
      this.item = item;
      this.price = price;
      this.quant = quant;
   }
   // to compare 
   public int compareTo(Cart comp) {
      if(this.quant > comp.quant) {
         return 1;
      } else {
         return -1;
      }
   }
   public static void main(String args[]) {
      // creating triplet of array
      Cart[] obj = new Cart[3];
      obj[0] = new Cart("Rice", 59, 5);
      obj[1] = new Cart("Milk", 60, 2);
      obj[2] = new Cart("Bread", 45, 1);
      Arrays.sort(obj); 
      // to sort
      System.out.println("Elements of the newly sorted array: ");
	   for(int i = 0; i < obj.length; i++) {
         System.out.println("Item: " + obj[i].item + ", " + "Price: " + obj[i].price + ", " + "Quantity: " + obj[i].quant);	
      }
	}
}

运行后,它将显示以下结果:

Elements of the newly sorted array: 
Item: Bread, Price: 45.0, Quantity: 1
Item: Milk, Price: 60.0, Quantity: 2
Item: Rice, Price: 59.0, Quantity: 5

结论

Comparable和Comparator接口都用于对给定列表或对象的元素进行排序,但是,Comparable接口修改原始类,而Comparator接口不修改原始类。在本文中,我们学习了如何使用这些接口对三元组数组进行排序。

更新于:2024年10月30日

207 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告