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