第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

一文搞定Comparable和Comparator

標(biāo)簽:
Java

一文搞定Comparable和Comparator

日常求赞,感谢老板。

一、Comparable

(1)、定义

首先Comparable是Java提供的一个接口、里面只有一个方法:

/**
 * Compares this object with the specified object for order.  Returns a
 * negative integer, zero, or a positive integer as this object is less
 * than, equal to, or greater than the specified object.
 */
public int compareTo(T o);

翻一下上面的注解:

比较此对象和指定对象的顺序

  1. 当此对象小于指定对象时返回负数
  2. 当此对象等于指定对象时返回0
  3. 当此对象大于指定对象时返回正数

由此可见这个接口提供的方法可以用来比较实现了此接口的对象的顺序(“大小”),常见的如:String、Integer等类都实现了这个接口,所以这些对象都可以使用compareTo方法来进行比较。

(2)、举个栗子

Integer

public int compareTo(Integer anotherInteger) {
    return compare(this.value, anotherInteger.value);
}

public static int compare(int x, int y) {
    return (x < y) ? -1 : ((x == y) ? 0 : 1);
}

可见当此对象值<比较对象的值是返回-1,相等返回0,大于返回1(和接口定义的方法含义一致)

(3)、场景

  1. 当存储到Collection、Array中时,可以直接使用Collections和Arrays的sort方法进行排序,排序规则为元素对象重写的compareTo方法。
  2. 当这些类存储到如TreeSet或TreeMap中时,会自动根据重写的compareTo方法来进行排序存储。
  3. 实现了这个接口的类之间调用compareTo进行比较。

二、Comparator

(1)、定义

字面意思理解下,比较器,用来指定比较规则。

接口Comparator,实现该接口并在实现时指定类型,重写compare方法,就可以规定指定类型的比较规则。

(2)、举个栗子

我现在创建了一个bean叫TestBean:

@Data
public class TestBean {

    private int id;

    private String name;
}

我将要把他存放到集合中,且要根据TestBean里的id属性的值进行倒叙排序。这样就可以写个类实现Comparator接口且泛型为TestBean。

@Override
public int compare(TestBean o1, TestBean o2) {
    int id1 = o1.getId();
    int id2 = o2.getId();
    if (id1 < id2) {
        return 1;
    }
    if (id1 > id2) {
        return -1;
    }
    return 0;
}

讲下为啥这样写:

首先要知道正序情况下:<返回-1,=返回0,>返回1,这个和compareTo的比较是一样的,所以说倒序的话就是反过来:<返回1,=返回0,>返回-1

精简写法:

@Override
public int compare(TestBean o1, TestBean o2) {
    int id1 = o1.getId();
    int id2 = o2.getId();
    return id2 - id1;
}

id2-id1:如果id1<id2那id2-id1即为正数,如果id1>id2那id2-id1即为负数,刚好符合逻辑。

(3)、场景

上面例子里已经是一个场景了(集合中进行元素的自定义排序)

  1. Collections.sort()/Arrays.sort(),如果没实现Comparable,是不能直接进行排序的,这就可以在第二个参数加入实现了Comparator接口的比较器,完成自己的比较规则。
  2. List对象的sort方法,必须传入比较器

三、最后

总结内容

更多资源:其实是白羊

欢迎star

日常求赞

  • 如果你认为本文对你有帮助,还请「在看/转发/赞/star」,多谢
  • 如果你还发现了更好或不同的想法,还请在留言区不吝赐教,一起探讨交流修改,万分感谢

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消