Java比較器(對象排序)

Java實現(xiàn)排序的方式

  • 自然排序:java.lang.Comparable
  • 定制排序:java.lang.Comparator

自然排序

應用場景

1榴都、Comparable接口強行對它的每一個子類進行整體排序下面,這種排序被稱為類的自然排序(默認升序排序碟案,從小到大)
2、實現(xiàn)了Comparable接口的對象棉饶,可在任何位置進行排序比較,沒有使用范圍的局限性

具體使用

1、實現(xiàn)Comparable接口的子類赋续,必須重寫compareTo(Object obj)方法
3、兩個對象即通過compareTo(Object obj)方法的返回值來比較大小
4另患、如果當前對象this大于形參對象obj纽乱,剛返回正整數(shù),如果小于返回負整數(shù)昆箕,如果等于返回0
5鸦列、對于實現(xiàn)過接口的子類,通過使用Collections.sort()或Arrays.sort()進行自動排序

代碼舉例
  @Test
    public void test1(){
        String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};
        //
        Arrays.sort(arr);

        System.out.println(Arrays.toString(arr));

    }

定制排序

應用場景

1鹏倘、需要排序的對象薯嗤,沒有實現(xiàn)java.lang.Comparable接口又不方便修改代碼時
2、實現(xiàn)了自然排序纤泵,不滿足業(yè)務需求時
3骆姐、實現(xiàn)了Comparable接口的對象,更偏向于臨時性排序輸出

具體使用

1夕吻、實現(xiàn)Comparator接口诲锹,重寫compare(Object obj1,Object obj2)方法,比較o1和o2的大小
2涉馅、對于實現(xiàn)過接口的子類归园,通過使用Collections.sort()或Arrays.sort(),裝載到容器中稚矿,進行定制排序

代碼舉例
 @Test
    public void test4(){
        Goods[] arr = new Goods[6];
        arr[0] = new Goods("lenovoMouse",34);
        arr[1] = new Goods("dellMouse",43);
        arr[2] = new Goods("xiaomiMouse",12);
        arr[3] = new Goods("huaweiMouse",65);
        arr[4] = new Goods("huaweiMouse",224);
        arr[5] = new Goods("microsoftMouse",43);

        Arrays.sort(arr, new Comparator() {
            //指明商品比較大小的方式:按照產(chǎn)品名稱從低到高排序,再按照價格從高到低排序
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Goods && o2 instanceof Goods){
                    Goods g1 = (Goods)o1;
                    Goods g2 = (Goods)o2;
                    if(g1.getName().equals(g2.getName())){
                        return -Double.compare(g1.getPrice(),g2.getPrice());
                    }else{
                        return g1.getName().compareTo(g2.getName());
                    }
                }
                throw new RuntimeException("輸入的數(shù)據(jù)類型不一致");
            }
        });

        System.out.println(Arrays.toString(arr));
    }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末庸诱,一起剝皮案震驚了整個濱河市捻浦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桥爽,老刑警劉巖朱灿,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钠四,居然都是意外死亡盗扒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門缀去,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侣灶,“玉大人,你說我怎么就攤上這事缕碎∪煊埃” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵咏雌,是天一觀的道長凡怎。 經(jīng)常有香客問我,道長赊抖,這世上最難降的妖魔是什么统倒? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮熏迹,結果婚禮上檐薯,老公的妹妹穿的比我還像新娘。我一直安慰自己注暗,他們只是感情好坛缕,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捆昏,像睡著了一般赚楚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骗卜,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天宠页,我揣著相機與錄音,去河邊找鬼寇仓。 笑死举户,一個胖子當著我的面吹牛,可吹牛的內容都是我干的遍烦。 我是一名探鬼主播俭嘁,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼服猪!你這毒婦竟也來了供填?” 一聲冷哼從身側響起拐云,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎近她,沒想到半個月后叉瘩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡粘捎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年薇缅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晌端。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捅暴,死狀恐怖,靈堂內的尸體忽然破棺而出咧纠,到底是詐尸還是另有隱情,我是刑警寧澤泻骤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布漆羔,位于F島的核電站,受9級特大地震影響狱掂,放射性物質發(fā)生泄漏演痒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一趋惨、第九天 我趴在偏房一處隱蔽的房頂上張望鸟顺。 院中可真熱鬧,春花似錦器虾、人聲如沸讯嫂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欧芽。三九已至,卻和暖如春葛圃,著一層夾襖步出監(jiān)牢的瞬間千扔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工库正, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留曲楚,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓褥符,卻偏偏與公主長得像龙誊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子属瓣,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容

  • 項目中經(jīng)常會遇到列表搜索查詢载迄,大部分的查詢是可以通過sql語句來實現(xiàn)的讯柔,有些特殊的搜索排序sql則實現(xiàn)不了,例如中...
    信徒_allen閱讀 2,584評論 0 1
  • java基礎 集合承繼包含圖 Collection vs Collections 首先护昧,"Collection" ...
    onlyHalfSoul閱讀 1,317評論 0 5
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法魂迄,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,222評論 0 2
  • 面向對象主要針對面向過程。 面向過程的基本單元是函數(shù)惋耙。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,054評論 0 4
  • 今日任務1、TreeSet介紹(掌握TreeSet集合的應用)2灭美、Comparable 接口介紹(掌握)3推溃、Com...
    Villain丶Cc閱讀 1,824評論 0 1