欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaSE中compare、compareTo的區(qū)別

 更新時(shí)間:2023年05月14日 14:59:01   作者:bug菌  
本文主要介紹了JavaSE中compare、compareTo的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

 1.前言

在java當(dāng)中,若是進(jìn)行比較,大家可能第一時(shí)間想到,==或是!=,這種數(shù)學(xué)上的比較符>、

接下來,我就分別介紹并演示這兩種實(shí)現(xiàn)方法。

2.環(huán)境說明

環(huán)境說明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

3.概述

3.1Comparable 簡(jiǎn)介

首先Comparable是一個(gè)排序接口,這也就表示若一個(gè)類實(shí)現(xiàn)了Comparable接口,則意味著該類支持排序。

public interface Comparable<T> {
    public int compareTo(T o);
}

3.2Comparable 定義

Comparable 接口僅提供了一個(gè)函數(shù)方法compareTo(),它的定義如下:

那具體該方法有何作用呢?請(qǐng)接著往下看。

compareTo()方法返回的是一個(gè)int類型值, 這里我著重給大家介紹一下。

若你使用compareTo()進(jìn)行a與b的比較,eg:a.compareTo(b),那么,返回值有三種結(jié)果情況,分別如下:

  • 若返回值為負(fù)數(shù),則說明a
  • 若返回值為0,則說明a=b;
  • 若返回值為正數(shù),則說明a>b;

其中,String類就是一個(gè)典例,它就是實(shí)現(xiàn)了Comparable接口。

 其中就重寫了Comparable接口中的compareTo()方法,具體實(shí)現(xiàn)邏輯大家可以借鑒。

3.3Comparator 簡(jiǎn)介

接下來,我再給大家講解一下Comparator接口。

首先Comparator是一個(gè)比較器接口,用于類設(shè)計(jì)已經(jīng)完成,還想排序(Arrays)的情況下使用。

目前它只提供了兩個(gè)函數(shù)供使用。

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
}

3.4Comparator 定義

針對(duì)Comparator接口,若一個(gè)類實(shí)現(xiàn)了它,只需要實(shí)現(xiàn)compare()方法即可,可以不用實(shí)現(xiàn)equals方法,因?yàn)槿魏晤惖某惗际荗bject,查看Object類也可得知equals()就被實(shí)現(xiàn)了。

該方法 int compare(T a, T b) 是“比較a和b的大小”。返回值結(jié)果情況與compareTo()方法一致,具體如下:

  • 若返回值為負(fù)數(shù),則說明a
  • 若返回值為0,則說明a=b;
  • 若返回值為正數(shù),則說明a>b;

3.5區(qū)別

方法的比較

1.compareTo(Object obj)方法是java.lang.Comparable接口中的方法, 當(dāng)需要對(duì)類的對(duì)象進(jìn)行排序時(shí),該類需要實(shí)現(xiàn)Comparable接口,必須重寫compareTo(T o)方法。

比如String類等一些類默認(rèn)實(shí)現(xiàn)了該接口,重寫了 compareTo()方法,例如s1.compareTo(s2),自然返回值就是s1 與 s2 的ASC碼差值,其實(shí)就是字典排序;

2.compare(Object o1, Object o2)方法是java.util.Comparator接口的方法, 它實(shí)際上用的是待比較對(duì)象的compare(T o1, T o2)方法;

3、Comparable 是排序接口,而Comparator 是比較器接口。

4. 實(shí)例演示

4.1.Comparable使用演示

接下來我先給大家演示下如何實(shí)現(xiàn)Comparable接口的compareTo()方法進(jìn)行排序。

@Data
public class Dog implements Comparable<Dog> {
    private String type;
    private double price;
    public Dog() {
    }
    public Dog(String name, int price) {
        this.type = name;
        this.price = price;
    }
    public String toString() {
        return "狗品種為:" + type + ",價(jià)格為:" + price;
    }
    @Override
    public int compareTo(Dog o) {//升序
        if (this.price > o.price) {
            return 1;
        } else if (this.price < o.price) {
            return -1;
        }
        return 0;
    }
}

寫個(gè)main函數(shù)進(jìn)行測(cè)試驗(yàn)證。演示代碼如下:

public class ComparableTest {
    public static void main(String[] args) {
        Dog[] dogs = {
                new Dog("泰迪", 10),
                new Dog("柯基", 78),
                new Dog("柴犬", 55),
                new Dog("藏獒", 42),
                new Dog("斗牛犬", 15)
        };
        //升序
        Arrays.sort(dogs);
        for (Dog dog : dogs) {
            System.out.println(dog);
        }
    }
}

執(zhí)行main函數(shù),控制臺(tái)打印如下:

 我們?cè)僬{(diào)整一下排序規(guī)則,改為按對(duì)象中price價(jià)格進(jìn)行降序。

@Override
public int compareTo(Dog o) {//降序
    if (this.price < o.price) {
        return 1;
    } else if (this.price > o.price) {
        return -1;
    }
    return 0;
}

再來看下價(jià)格。

4.2 Comparable使用演示

我們來實(shí)現(xiàn)一個(gè)比較器,實(shí)現(xiàn)Comparator接口的compare()方法,其中泛型我直接指定Dog對(duì)象。演示代碼具體如下:

public class ComparatorDog implements Comparator<Dog> {
    @Override
    public int compare(Dog o1, Dog o2) {
        //升序
        if (o1.getPrice() > o2.getPrice()) {
            return 1;
        } else if (o1.getPrice() < o2.getPrice()) {
            return -1;
        }
        return 0;
    }
}

寫個(gè)測(cè)試類進(jìn)行測(cè)試用例打?。?/p>

public static void main(String[] args) {
    Dog[] dogs = {
            new Dog("泰迪", 10),
            new Dog("柯基", 78),
            new Dog("柴犬", 55),
            new Dog("藏獒", 42),
            new Dog("斗牛犬", 15)
    };
    //升序
    Arrays.sort(dogs,new ComparatorDog());
    for (Dog dog : dogs) {
        System.out.println(dog);
    }
}

接下來運(yùn)行main函數(shù),大家請(qǐng)看控制臺(tái)輸出截圖:

我們稍微調(diào)整下排序規(guī)則,將升序改為降序。具體修改如下:

@Override
public int compare(Dog o1, Dog o2) {
    //降序
    if (o1.getPrice() < o2.getPrice()) {
        return 1;
    } else if (o1.getPrice() > o2.getPrice()) {
        return -1;
    }
    return 0;
}

我們運(yùn)行main函數(shù)輸出結(jié)果如下截圖:

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

相關(guān)文章

  • centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng)

    centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng)

    這篇文章主要介紹了centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • spring cloud中微服務(wù)之間的調(diào)用以及eureka的自我保護(hù)機(jī)制詳解

    spring cloud中微服務(wù)之間的調(diào)用以及eureka的自我保護(hù)機(jī)制詳解

    這篇文章主要介紹了spring cloud中微服務(wù)之間的調(diào)用以及eureka的自我保護(hù)機(jī)制詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • h2database在springboot中的使用教程

    h2database在springboot中的使用教程

    這篇文章主要介紹了h2database在springboot中的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • redis分布式鎖RedissonLock的實(shí)現(xiàn)細(xì)節(jié)解析

    redis分布式鎖RedissonLock的實(shí)現(xiàn)細(xì)節(jié)解析

    這篇文章主要介紹了redis分布式鎖RedissonLock的實(shí)現(xiàn)細(xì)節(jié)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring?Boot?集成并開發(fā)?Sa-token示例詳解

    Spring?Boot?集成并開發(fā)?Sa-token示例詳解

    Sa-token是一款高可用的權(quán)限認(rèn)證框架,他帶我們用最簡(jiǎn)化的配置完成用?spring?security?需要進(jìn)行大量配置的才能完成的工作,這篇文章主要介紹了Spring?Boot?集成并開發(fā)?Sa-token,需要的朋友可以參考下
    2023-06-06
  • 淺談Spring Boot 整合ActiveMQ的過程

    淺談Spring Boot 整合ActiveMQ的過程

    本篇文章主要介紹了淺談Spring Boot 整合ActiveMQ的過程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 使用SpringMVC返回json字符串的實(shí)例講解

    使用SpringMVC返回json字符串的實(shí)例講解

    下面小編就為大家分享一篇使用SpringMVC返回json字符串的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot中MockMVC單元測(cè)試的實(shí)現(xiàn)

    SpringBoot中MockMVC單元測(cè)試的實(shí)現(xiàn)

    Mock是一種用于模擬和替換類的對(duì)象的方法,以便在單元測(cè)試中獨(dú)立于外部資源進(jìn)行測(cè)試,本文主要介紹了SpringBoot中MockMVC單元測(cè)試的實(shí)現(xiàn),具有應(yīng)該的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java ThreadLocal類使用詳解

    Java ThreadLocal類使用詳解

    這篇文章主要介紹了Java ThreadLocal類詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • Java實(shí)現(xiàn)SHA-1算法實(shí)例

    Java實(shí)現(xiàn)SHA-1算法實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)SHA-1算法,實(shí)例分析了java實(shí)現(xiàn)SHA-1算法的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論