Java教程

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]
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4