使用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接口不修改原始类。在本文中,我们学习了如何使用这些接口对三元组数组进行排序。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP