本文概述
- Java可比示例
- Java比较器示例
但是, 下面给出的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类型的列表元素进行排序。 |
文件: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
【Comparable和Comparator之间的区别】此类提供基于名称的比较逻辑。在这种情况下, 我们使用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 23Sorting by Age
105 Jai 21
101 Vijay 23
106 Ajay 27
推荐阅读
- HashMap和Hashtable之间的区别
- ArrayList和Vector之间的区别
- ArrayList和LinkedList之间的区别
- Java Comparator接口
- Java Comparable接口
- Java中的集合
- Java WindowListener接口
- Java MouseMotionListener接口
- Java MouseListener接口