Comparable与Comparator之间的区别
Comparable与Comparator都是接口,可用于对集合元素进行排序。
但是,Comparable与Comparator之间有很多区别和下面提供的比较器接口。
Comparable |
Comparator |
1)Comparable提供了单个排序顺序。换句话说,我们可以根据单个元素(例如id,名称和价格)对集合进行排序。 |
比较器提供多个排序序列。换句话说,我们可以根据ID,名称和价格等多个元素对集合进行排序。 |
2)可比的影响原始类,即实际类被修改。 |
比较器不影响原始类,即,实际的类未修改。 |
3)Comparable提供了 compareTo()方法来对元素进行排序。 |
比较器提供了 compare()方法来对元素进行排序。 |
4) java.lang 包中存在可比。 |
java.util 软件包中提供了一个比较器。 |
5)我们可以通过 Collections.sort(List)方法对可比较类型的列表元素进行排序。 |
我们可以通过 Collections.sort(List,Comparator)方法对比较器类型的列表元素进行排序。 |
Java Comparable示例
让我们看一个Comparable接口的示例,该接口根据年龄对列表元素进行排序。
文件: TestSort3.java
class which implements Comparable Interfaceimport 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;
elsereturn -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);
}
}
}
输出:
105 Jai 21
101 Vijay 23
106 Ajay 27
Java Comparator示例
让我们看一下Java比较器接口的示例,在该接口中,我们使用不同的比较器对列表的元素进行排序。
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;
elsereturn -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
在此类中,我们将根据名称和年龄进行排序,以打印对象的值。
import java.util.*;
import java.io.*;
class TestComparator{
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));
System.out.println("Sorting by Name");
Collections.sort(al,new NameComparator());
for(Student st: al){
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
System.out.println("sorting by Age");
Collections.sort(al,new AgeComparator());
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
Java中ArrayList和LinkedList的示例
让我们看一个简单的示例,其中我们同时使用ArrayList和LinkedList。
import java.util.*;
class TestArrayLinked{
public static void main(String args[]){
List
al=new ArrayList
();
al.
add(
"Ravi");
al.
add(
"Vijay");
al.
add("Ravi");
al.
add(
"Ajay");
List
al2=new LinkedList
();
al2.
add(
"James");
al2.
add(
"Serena");
al2.
add(
"Swati");
al2.
add(
"Junaid");
System.
out.println(
"arraylist: "+al);
System.
out.println(
"linkedlist: "+al2);
}
}
输出:
arraylist: [Ravi,Vijay,Ravi,Ajay]
linkedlist: [James,Serena,Swati,Junaid]