使用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接口不修改原始类。在本文中,我们学习了如何使用这些接口对三元组数组进行排序。