Java Comparable
接口
原文:https://www.studytonight.com/java/comparable-in-collection-framework.php
Java Comparable 接口是集合框架的一个成员,用于比较对象,并按照自然顺序进行排序。
自然排序是指compareTo()
方法的行为,定义在Comparable
接口中。它的排序技术取决于接口使用的对象类型。如果对象类型是字符串,则按字典顺序对其进行排序。
如果对象类型是包装类对象,如:整数或列表,那么它会根据它们的值进行排序。
如果对象类型是自定义对象,如:用户定义的对象,则根据定义的compareTo()
方法进行排序。
实现这个接口的类可以通过调用Collections.sort()
方法自动排序。实现此接口的对象可以用作排序映射中的键或排序集合中的元素,而无需指定 comaprator。这个接口的声明如下。
申报
public interface Comparable<T>
可比方法
它包含下面给出的单一方法compareTo()
。
int compareTo(T o) : 它将对象与指定的对象进行比较,以便排序。
compareTo()
功能将当前对象与提供的对象进行比较。这个函数已经为默认包装类和基本数据类型实现了,但是这个函数也需要为用户定义的类实现。
如果当前对象大于提供的对象,则返回正整数。
如果当前对象小于提供的对象,则返回负整数。
如果当前对象等于提供的对象,则它返回零。
例外
如果指定的对象为空,则该方法返回 NullPointerException,如果指定对象的类型阻止将其与该对象进行比较,则返回ClassCastException
。
示例:排序列表
让我们举一个例子来对存储整数值的ArrayList
进行排序。我们使用集合类的sort()
方法对实现比较接口的对象进行排序。因为整数包装类实现了可比较,所以我们能够得到排序的对象。见下面的例子。
import java.util.*;
public class Demo {
public static void main(String a[]){
// Creating List
ArrayList<Integer> list = new ArrayList<>();
// Adding elements
list.add(100);
list.add(2);
list.add(66);
list.add(22);
list.add(10);
// Displaying list
System.out.println(list);
// Sorting list
Collections.sort(list);
// Displaying sorted list
System.out.println("Sorted List : "+list);
}
}
[100,2,66,22,10]排序列表:[2,10,22,66,100]
示例:排序字符串对象
对字符串对象进行排序时,可比较的基于字典顺序对其进行排序。意思是像排序顺序这样的字典。见下面的例子。
import java.util.*;
public class Demo {
public static void main(String a[]){
// Creating List
ArrayList<String> list = new ArrayList<>();
// Adding elements
list.add("D");
list.add("L");
list.add("A");
list.add("Z");
list.add("C");
// Displaying list
System.out.println(list);
// Sorting list
Collections.sort(list);
// Displaying sorted list
System.out.println("Sorted List : "+list);
}
[D,L,A,Z,C]排序列表:[A,C,D,L,Z]
示例:排序用户定义的对象
如果我们有自定义对象,那么我们必须实现 Comparable 接口并覆盖其 compareTo()方法。现在它将基于我们在compareTo()
方法中定义的逻辑进行比较。见下面的例子。
import java.util.*;
class Employee implements Comparable <Employee>
{
int empId;
String name;
public Employee (int empId, String name)
{
this.empId=empId;
this.name=name;
}
public String toString()
{
return this.empId + " " + this.name;
}
// Sorting by empId
public int compareTo(Employee std){
return this.empId - std.empId;
}
}
public class Demo {
public static void main(String a[]){
ArrayList <Employee> list = new ArrayList <Employee> ( );
list.add(new Employee(2, "Boman"));
list.add(new Employee(1, "Abram"));
list.add(new Employee(3, "Dinesh"));
// Displaying
for (int i=0; i<list.size(); i++)
System.out.println(list.get(i));
// Sorting
Collections.sort(list);
// Displaying after sorting
System.out.println("\nAfter Sorting :\n");
for (int i=0; i<list.size(); i++)
System.out.println(list.get(i));
}
}
2 博曼 1 亚伯兰 3 迪内什排序后:1 亚伯兰 2 博曼 3 迪内什