Collections集合工具類的方法

一奥喻、addAll&shuffle

Collections是集合工具類骄瓣,用來對集合進行操作在讶。部分方法如下:
public static <T> boolean addAll(Collection<T> c,T...elements):往集合中添加一些元素户辞。
public static void shuffle(list<?> list)打亂順序:打亂集合順序
public class demo1 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        Collections.addAll(arr,"abc","Hello","Java");//一次添加多個元素
        System.out.println(arr);

        Collections.shuffle(arr);//打亂順序
        System.out.println(arr);
    }
}
  • addAll無法同時添加多個對象

二蚀同、sort

public static <T> void sort(list<T> list):將集合中元素按照默認規(guī)則排序

注意:
    sort(list<T> list)使用前提
    被排序的集合里邊存儲的元素翔横,必須實現(xiàn)Comparable读跷,重寫接口中的compareTo

Comparable接口的排序規(guī)則:
    自己(this)-參數(shù):升序,反之則降序
@Override
public int compareTo(Person o) {
   return 0;//認為元素都是相同的
  //自定義比較的規(guī)則,比較兩人的年齡(this,參數(shù)Person)
   return this.getAge() - o.getAge();//年齡升序
}
public class Person implements Comparable<Person>{
    private String name;
    private int age;

    /*
        省略部分常規(guī)代碼
   */

    //重寫排序的規(guī)則
    @Override
    public int compareTo(Person o) {
//        return 0;//認為元素都是相同的
//        自定義比較的規(guī)則,比較兩人的年齡(this,參數(shù)Person)
        return this.getAge() - o.getAge();//年齡升序
    }
}
public class demo2Sort {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list,1,2,3,5,6,4,8,7,0,9);
        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);

        ArrayList<Person> p = new ArrayList<>();
        p.add(new Person("小丑",20));
        p.add(new Person("小王",22));
        p.add(new Person("小李",21));

        System.out.println(p);
//        Collections.sort(p);//無法直接對對象進行排序
        Collections.sort(p);
        System.out.println(p);//年齡升序進行排序

    }
}

三禾唁、Comparator和Comparable的區(qū)別

相對于上面的Comparable,Comparator不需要在實體類中實現(xiàn)Comparable<Person>效览,直接使用Collections.sort()工具進行排序,根據(jù)自己的需求重寫return 后面的代碼荡短。

import java.util.*;

public class demo3Sort {

    public static void main(String[] args) {
        ArrayList<Integer> i = new ArrayList<>();
        Collections.addAll(i,1,3,5,7,5,3,6,8,5,7);

        Collections.sort(i, new Comparator<Integer>() {//重寫排序方法
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;//前-后就是升序
            }
        });
        System.out.println(i);//對集合內的數(shù)字進行升序排序

        ArrayList<Student> stu = new ArrayList<>();
        stu.add(new Student("a迪麗熱巴",21));
        stu.add(new Student("c古力娜扎",20));
        stu.add(new Student("b馬爾扎哈",22));
        stu.add(new Student("d迪麗熱巴",22));
        /*
        對集合中的對象按照年齡進行升序排序
         */
        Collections.sort(stu, new Comparator<Student>() {
            @Override
            public int compare(Student o1,Student o2) {
                int result1 = o1.getAge() - o2.getAge();//按照年齡
                int result2 = o1.getName().charAt(0) - o2.getName().charAt(0);//按照名字首字母
                return result2;
            }
        });
        System.out.println(stu);//對集合中的對象按照年齡進行升序排序


    }
}

總結:

區(qū)別

兩種比較器Comparable和Comparator丐枉,后者相比前者有如下優(yōu)點:
1、如果實現(xiàn)類沒有實現(xiàn)Comparable接口掘托,又想對兩個類進行比較(或者實現(xiàn)類實現(xiàn)了Comparable接口瘦锹,但是對compareTo方法內的比較算法不滿意),那么可以實現(xiàn)Comparator接口,自定義一個比較器弯院,寫比較算法
2噩峦、實現(xiàn)Comparable接口的方式比實現(xiàn)Comparator接口的耦合性要強一些,如果要修改比較算法抽兆,則需要修改Comparable接口的實現(xiàn)類识补,而實現(xiàn)Comparator的類是在外部進行比較的,不需要對實現(xiàn)類有任何修改辫红。從這個角度說凭涂,實現(xiàn)Comparable接口的方式其實有些不太好,尤其在我們將實現(xiàn)類的.class文件打成一個.jar文件提供給開發(fā)者使用的時候贴妻。實際上實現(xiàn)Comparator 接口的方式后面會寫到就是一種典型的策略模式切油。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市名惩,隨后出現(xiàn)的幾起案子澎胡,更是在濱河造成了極大的恐慌,老刑警劉巖娩鹉,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攻谁,死亡現(xiàn)場離奇詭異,居然都是意外死亡弯予,警方通過查閱死者的電腦和手機戚宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锈嫩,“玉大人受楼,你說我怎么就攤上這事『舸纾” “怎么了艳汽?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長对雪。 經常有香客問我河狐,道長,這世上最難降的妖魔是什么慌植? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任甚牲,我火速辦了婚禮,結果婚禮上蝶柿,老公的妹妹穿的比我還像新娘丈钙。我一直安慰自己,他們只是感情好交汤,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布雏赦。 她就那樣靜靜地躺著劫笙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪星岗。 梳的紋絲不亂的頭發(fā)上填大,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音俏橘,去河邊找鬼允华。 笑死,一個胖子當著我的面吹牛寥掐,可吹牛的內容都是我干的靴寂。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼召耘,長吁一口氣:“原來是場噩夢啊……” “哼百炬!你這毒婦竟也來了?” 一聲冷哼從身側響起污它,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤剖踊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衫贬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體德澈,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撬统。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡两曼,死狀恐怖,靈堂內的尸體忽然破棺而出斧散,到底是詐尸還是另有隱情供常,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布鸡捐,位于F島的核電站栈暇,受9級特大地震影響,放射性物質發(fā)生泄漏箍镜。R本人自食惡果不足惜源祈,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望色迂。 院中可真熱鬧香缺,春花似錦、人聲如沸歇僧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祸轮,卻和暖如春兽埃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背适袜。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工柄错, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苦酱。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓鄙陡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親躏啰。 傳聞我的和親對象是個殘疾皇子趁矾,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容