Comparable 和 Comparator 都是接口,可用于对集合元素进行排序。但是,下面给出的 Comparable 和 Comparator 接口之间存在许多差异。
Comparable | Comparator |
---|---|
Comparable 提供单一排序序列。可以根据单个元素(例如 id、name 和 price)对集合进行排序。 | Comparator提供多种排序序列,可以根据 id、name 和 price 等多个元素对集合进行排序。 |
Comparable 影响原始类,即修改了实际类。 | Comparator不影响原始类,即不修改实际类。 |
Comparable 提供 compareTo() 方法对元素进行排序。 | Comparator 提供了 compare() 方法来对元素进行排序。 |
Comparable 存在于 java.lang 包中。 | Comparator存在于 java.util 包中。 |
可以通过 Collections.sort(List) 方法对 Comparable 类型的列表元素进行排序。 | 可以通过 Collections.sort(List, Comparator) 方法对 Comparator 类型的列表元素进行排序。 |
Java Comparable 示例
让我们看一个 Comparable 接口的例子,它根据 age 对列表元素进行排序。
文件:TestComparableSort3.java
import java.util.*;
import java.io.*;
class Student implements Comparable<Student>{
int rollno;
String name;
int age;
Student(int rollno,String name,int age){
this.rollno=rollno;
this.name=name;
this.age=age;
}
public int compareTo(Student st){
if(age==st.age)
return 0;
else if(age>st.age)
return 1;
else
return -1;
}
}
public class TestSort3{
public static void main(String args[]){
ArrayList<Student> al=new ArrayList<Student>();
al.add(new Student(101,"Vijay",23));
al.add(new Student(106,"Ajay",27));
al.add(new Student(105,"Jai",21));
Collections.sort(al);
for(Student st:al){
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
}
}
Java Comparator示例
下面让我们看一个 Java Comparator 接口的示例,示例中使用不同的Comparator对列表的元素进行排序。
Student.java
class Student{
int rollno;
String name;
int age;
Student(int rollno,String name,int age){
this.rollno=rollno;
this.name=name;
this.age=age;
}
}
AgeComparator.java
import java.util.*;
class AgeComparator implements Comparator<Student>{
public int compare(Student s1,Student s2){
if(s1.age==s2.age)
return 0;
else if(s1.age>s2.age)
return 1;
else
return -1;
}
}
NameComparator.java
此类提供基于 name 的比较逻辑。 在这种情况下使用 String 类的 compareTo() 方法,它在内部提供比较逻辑。
import java.util.*;
class NameComparator implements Comparator<Student>{
public int compare(Student s1,Student s2){
return s1.name.compareTo(s2.name);
}
}
TestComparator.java 在这个类中,我们通过根据 name 和 age 排序来打印对象的值。
//Java Program to demonstrate the use of Java Comparator
import java.util.*;
import java.io.*;
class TestComparator{
public static void main(String args[]){
//Creating a list of students
ArrayList<Student> al=new ArrayList<Student>();
al.add(new Student(101,"Zhangsan",23));
al.add(new Student(106,"Lisi",27));
al.add(new Student(105,"JaiWu",21));
System.out.println("Sorting by Name");
//Using NameComparator to sort the elements
Collections.sort(al,new NameComparator());
//Traversing the elements of list
for(Student st: al){
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
System.out.println("sorting by Age");
//Using AgeComparator to sort the elements
Collections.sort(al,new AgeComparator());
//Travering the list again
for(Student st: al){
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
}
}
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Comparable 和 Comparator 的区别
本文链接:https://www.vsdiffer.com/vs/comparable-vs-comparator.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。