Java中Comparator升序降序的具體使用
在使用Java自帶的排序函數(shù)時(shí),往往需要根據(jù)自己的需求自定義比較器。以前一直對(duì)Comparator的升序降序疑惑?,F(xiàn)在記錄一下,加深下印象。
先給結(jié)論:
實(shí)現(xiàn)Comparator接口,必須實(shí)現(xiàn)下面這個(gè)函數(shù):
@Override public int compare(CommentVo o1, CommentVo o2) { return o1.getTime().compareTo(o2.getTime()); }
這里o1表示位于前面的對(duì)象,o2表示后面的對(duì)象
- 返回-1(或負(fù)數(shù)),表示不需要交換01和02的位置,o1排在o2前面,asc
- 返回1(或正數(shù)),表示需要交換01和02的位置,o1排在o2后面,desc
舉例說(shuō)明:(分析說(shuō)明在運(yùn)行結(jié)果之后)
package com.zhb.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; class A { int a; public A(int a) { this.a = a; } @Override public String toString() { return "[a=" + a + "]"; } } class MyComparator implements Comparator<A> { @Override public int compare(A o1, A o2) { //升序 //return o1.a - o2.a; //降序:后面會(huì)具體分析為什么降序 return o2.a - o1.a; } } public class ComparatorTest { public static void main(String[] args) { A a1 = new A(5); A a2 = new A(7); List<A> list = new ArrayList<A>(); list.add(a1); list.add(a2); Collections.sort(list, new MyComparator()); System.out.println(list); } }
輸出結(jié)果:
下面來(lái)用我們之前的結(jié)論解釋為什么return o2.a - o1.a;
就是降序了:
首先o2是第二個(gè)元素,o1是第一個(gè)元素。無(wú)非就以下這些情況:
①: o2.a > o1.a
: 那么此時(shí)返回正數(shù),表示需要調(diào)整o1,o2的順序,也就是需要把o2放到o1前面,這不就是降序了么。
②:o2.a < o1.a
: 那么此時(shí)返回負(fù)數(shù),表示不需要調(diào)整,也就是此時(shí)o1 比 o2大, 不還是降序么。
到此這篇關(guān)于Java中Comparator升序降序的具體使用的文章就介紹到這了,更多相關(guān)Java Comparator升序降序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java開(kāi)發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用
這篇文章主要為大家介紹了java開(kāi)發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Java關(guān)鍵字詳解之final static this super的用法
this用來(lái)調(diào)用目前類(lèi)自身的成員變量,super多用來(lái)調(diào)用父類(lèi)的成員,final多用來(lái)定義常量用的,static定義靜態(tài)變量方法用的,靜態(tài)變量方法只能被類(lèi)本身調(diào)用,下文將詳細(xì)介紹,需要的朋友可以參考下2021-10-10MyBatis Plus復(fù)合主鍵問(wèn)題的解決
在數(shù)據(jù)庫(kù)設(shè)計(jì)中,有時(shí)候需要使用復(fù)合主鍵來(lái)唯一標(biāo)識(shí)表中的一行數(shù)據(jù),本文將為您詳細(xì)介紹MyBatis Plus中復(fù)合主鍵的問(wèn)題以及解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09Java使用同步方法解決銀行取錢(qián)的安全問(wèn)題案例分析
這篇文章主要介紹了Java使用同步方法解決銀行取錢(qián)的安全問(wèn)題,結(jié)合具體案例形式分析了java同步方法實(shí)現(xiàn)多線程安全操作銀行取錢(qián)問(wèn)題,需要的朋友可以參考下2019-09-09Java基礎(chǔ)入門(mén) Swing中間容器的使用
這篇文章主要介紹了Java基礎(chǔ)入門(mén) Swing中間容器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12SpringBoot實(shí)現(xiàn)密碼安全存儲(chǔ)的五種方式小結(jié)
項(xiàng)目開(kāi)發(fā)中,密碼安全存儲(chǔ)是非常關(guān)鍵的一環(huán),作為開(kāi)發(fā)者,我們需要確保用戶的密碼在存儲(chǔ)時(shí)被安全地加密,避免因數(shù)據(jù)泄露而造成嚴(yán)重后果,所以本文給大家介紹了SpringBoot實(shí)現(xiàn)密碼安全存儲(chǔ)的5種方式,需要的朋友可以參考下2025-03-03Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫(kù)方式
這篇文章主要介紹了Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06SpringBoot錯(cuò)誤提示400狀態(tài)問(wèn)題
這篇文章主要介紹了SpringBoot錯(cuò)誤提示400狀態(tài)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08