个性化阅读
专注于IT技术分析

Comparable和Comparator之间的区别

本文概述

Comparable和Comparator都是接口, 可用于对集合元素进行排序。

但是, 下面给出的Comparable和Comparator接口之间有许多差异。

可比 比较器
1)可比性提供单个排序序列。换句话说, 我们可以根据单个元素(例如id, 名称和价格)对集合进行排序。 比较器提供了多个排序序列。换句话说, 我们可以根据ID, 名称和价格等多个元素对集合进行排序。
2)可比会影响原始类别, 即实际类别会被修改。 比较器不会影响原始类, 即, 实际类不会被修改。
3)Comparable提供compareTo()方法对元素进行排序。 比较器提供compare()方法对元素进行排序。
4)java.lang软件包中存在Comparable。 java.util软件包中提供了一个比较器。
5)我们可以通过Collections.sort(List)方法对Comparable类型的列表元素进行排序。 我们可以通过Collections.sort(List, Comparator)方法对Comparator类型的列表元素进行排序。

Java可比示例

让我们看一个Comparable接口的示例, 该接口根据年龄对列表元素进行排序。

文件:TestSort3.java

//Java Program to demonstrate the use of Java Comparable.
//Creating a class which implements Comparable Interface
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;
}
}
//Creating a test class to sort the elements
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);
}
}
}

立即测试

输出:

105 Jai 21
101 Vijay 23
106 Ajay 27

Java比较器示例

让我们看一下Java 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

此类提供基于名称的比较逻辑。在这种情况下, 我们使用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

在此类中, 我们将根据名称和年龄进行排序, 以打印对象的值。

//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, "Vijay", 23));
al.add(new Student(106, "Ajay", 27));
al.add(new Student(105, "Jai", 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);
}

}
}

输出:

Sorting by Name
106 Ajay 27
105 Jai 21
101 Vijay 23

Sorting by Age       
105 Jai 21
101 Vijay 23
106 Ajay 27
赞(0)
未经允许不得转载:srcmini » Comparable和Comparator之间的区别

评论 抢沙发

评论前必须登录!