Java 通过实现Comparable接口对自定义对象进行排序
Java提供了各种排序算法和方法,可以帮助我们对数组、列表或任何集合进行排序。Comparable接口是一种附加的方式,当我们希望按照它们的自然顺序对自定义对象进行排序时非常有用。例如,它按字典顺序排序字符串和按数字顺序排序数字。这个接口在’java.lang’包中可用。
在本文中,我们将通过示例来学习Comparable接口的使用。此外,我们还将讨论Collection接口的一些方法和类,这些方法和类将帮助我们使用Comparable接口对自定义对象进行排序。
通过实现Comparable接口进行排序
Comparable接口的语法
class nameOfclass implements Comparable<nameOfclass>
在进入程序之前,让我们先了解一些类和方法。
compareTo() 方法
Comparable接口只定义了一个名为’CompareTo’的方法,可以通过重写该方法来对对象集合进行排序。它使得可以将一个类的对象与该类本身进行比较。当’this’对象等于传入对象时,返回0;如果’this’对象较大,则返回正值;否则返回负值。
语法
compareTo( nameOfclass nameOfobject );
Collections.sort() 方法
Collection 接口下的类 ‘Collections’ 提供了一个静态方法 ‘Collections.sort()’,可以对指定集合(如 ArrayList 或 LinkedList)的元素进行排序。该方法位于 ‘java.util’ 包中。
语法
Collections.sort( nameOfcollection );
步骤
- 步骤 1 - 我们将开始导入
java.util
包,以便在程序中使用sort()
方法。 -
步骤 2 - 创建一个实现Comparable接口的类
Cart
。在其中,声明两个变量,并定义一个带有两个参数item
和price
的构造函数,类型分别为字符串和整数。 -
步骤 3 - 进一步,我们将使用
toString()
方法将对象的数据转换为字符串。然后,定义compareTo
方法,并以Cart
类的一个对象作为参数,用于比较this
对象和新创建的对象。 -
步骤 4 - 现在,在
main()
方法中,声明一个名为obj
的集合类型为ArrayList的Cart
类的对象,并使用内置的add()
方法将对象的详情存储到集合中。 -
步骤 5 - 最后,我们将把
obj
作为参数传递给Collections.sort()
方法来执行排序操作,并使用for each循环打印结果。
示例
import java.util.*;
public class Cart implements Comparable<Cart> {
String item;
double price;
Cart(String item, int price) {
// this keyword shows these variables belongs to constructor
this.item = item;
this.price = price;
}
// method for converting object into string
public String toString() {
return "Item: " + item + ", " + "Price: " + price;
}
// overriding method
public int compareTo(Cart comp) {
if(this.price > comp.price) {
return 1;
} else {
return -1;
}
}
public static void main(String[] args) {
// Declaring collection arraylist
List<Cart> obj = new ArrayList<>();
// Adding object to the collection
obj.add(new Cart("Rice", 59));
obj.add(new Cart("Milk", 60));
obj.add(new Cart("Bread", 45));
obj.add(new Cart("Peanut", 230));
obj.add(new Cart("Butter", 55));
System.out.println("The original Objects: ");
// to print unsorted list of objects
for(Cart print : obj) {
System.out.println(print);
}
Collections.sort(obj);
// Sorting the object
System.out.println("The newly sorted Objects: ");
// to print newly sorted list of objects
for(Cart print : obj) {
System.out.println(print);
}
}
}
输出
The original Objects:
Item: Rice, Price: 59.0
Item: Milk, Price: 60.0
Item: Bread, Price: 45.0
Item: Peanut, Price: 230.0
Item: Butter, Price: 55.0
The newly sorted Objects:
Item: Bread, Price: 45.0
Item: Butter, Price: 55.0
Item: Rice, Price: 59.0
Item: Milk, Price: 60.0
Item: Peanut, Price: 230.0
结论
在Java 1.0版本中,引入了可比较接口并在“java.lang”包中提供。通常,此包中定义的类、方法和接口都默认可供我们使用,因此在使用之前导入它们并不重要。本文介绍了可比较接口的实现,并且我们还发现了其内置方法“compareTo()”的用法。