Java 使用Comparable和Comparator对三元组数组进行排序

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
    }
};

名称比较器 通过在Arrays.sort()等方法的排序操作中传递。

Arrays.sort()

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

语法

Arrays.sort(nameOfarray);

代码工作原理

  • 创建一个名为’Cart’的类和其构造函数。在里面,声明三个变量。

  • 在主方法中,创建一个比较器,并在其中重写其方法’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);

代码的工作原理

  • 创建一个实现Comparable接口的类。然后在构造函数内部声明三个变量。

  • 在方法‘compareTo()’内定义排序逻辑。

  • 现在,在主方法中,我们将创建一个三元组数组,并使用内置方法‘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

结论

可比较和比较器两个接口都用于对给定列表或对象进行排序,但可比较接口会修改原始类,而比较器不会。在本文中,我们学习了如何使用这些接口对三元组数组进行排序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程