亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中比較器Comparator和Comparable的區(qū)別

 更新時(shí)間:2023年08月18日 08:59:06   作者:劉婉晴  
這篇文章主要介紹了Java中比較器Comparator和Comparable的區(qū)別,我們?cè)谑褂?Collections.sort()對(duì)鏈表進(jìn)行排序時(shí),常常需要根據(jù)不同情況自定義排序規(guī)則,今天我們來看看比較器之間的區(qū)別,需要的朋友可以參考下

一、背景

我們?cè)谑褂?Collections.sort() 對(duì)鏈表進(jìn)行排序(或者使用 Arrays.sort() 對(duì)數(shù)組進(jìn)行排序)時(shí),常常需要根據(jù)不同情況自定義排序規(guī)則。

比如:當(dāng)我們存儲(chǔ)學(xué)生對(duì)象時(shí),我們需要按照學(xué)生年齡進(jìn)行排序,這時(shí)我們就可以通過比較器 Comparator 或者 Comparable 對(duì)排序順序進(jìn)行控制。

本文將結(jié)合示例對(duì) Comparator 和 Comparable 兩種比較器的使用進(jìn)行介紹

二、Comparable

Comparable 是一個(gè)接口,其本質(zhì)上是一個(gè)內(nèi)比較器(在類內(nèi)部)。

需要定義排序/比較規(guī)則的類實(shí)現(xiàn) Comparable 接口,并且重寫 compareTo(Object o) 方法,從而自定義比較規(guī)則。

public interface Comparable<T>

Comparable 代碼示例 :

下面的代碼為 Student 類重寫了 compareTo 方法,實(shí)現(xiàn)了 Student 對(duì)象按照 age 大小進(jìn)行比較

public class Student implements Comparable<Object> {
    String name;
    int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "{" + this.getName() + "," + this.getAge() + "}";
    }
    // 通過重寫 compareTo 方法,實(shí)現(xiàn)比較器
    @Override
    public int compareTo(Object o) {
        Student student = (Student) o;
        return this.age - student.getAge();
    }
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student("wanqing", 21));
        list.add(new Student("xinyu", 23));
        list.add(new Student("huahua", 1));
        Collections.sort(list);
        System.out.println(list);
    }
}

可以觀察到輸出結(jié)果按照 age 升序進(jìn)行了排序 ——

在這里插入圖片描述

三、Comparator

Comparator 是一個(gè)外比較器,其使用場(chǎng)景為當(dāng)一個(gè)類未實(shí)現(xiàn) Comparable 方法,或者實(shí)現(xiàn)的 Comparable 方法的比較規(guī)則不是我們現(xiàn)在想用的(比如我們想按照降序的方式排序),我們就可以通過為 sort() 方法傳入 Comparator 的形式,自定義排序規(guī)則。

其使用方式如下:

Collections.sort(List<T> list, Comparator<? super T> c);
Arrays.sort(T[] a, Comparator<? super T> c);

Comparator 重寫 compare 方法,方法內(nèi)部重寫比較規(guī)則

Comparator 代碼示例

下面代碼通過傳入 Comparator比較器 的方式,實(shí)現(xiàn)了對(duì) list 按照學(xué)生年齡降序排序

    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student("wanqing", 21));
        list.add(new Student("xinyu", 23));
        list.add(new Student("huahua", 1));
        // 實(shí)現(xiàn)對(duì) list 按照學(xué)生年齡降序排序
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                // 降序排序
                return o2.getAge() - o1.getAge();
            }
        });
        System.out.println(list);
    }

可以觀察到輸出結(jié)果按照 age 進(jìn)行了降序排序 ——

在這里插入圖片描述

到此這篇關(guān)于Java中比較器Comparator和Comparable的區(qū)別的文章就介紹到這了,更多相關(guān)Java的Comparator和Comparable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論