Collection是類

都是包含靜態(tài)方法的工具類

Collections類

排序操作

  • void reverse(List list):反轉(zhuǎn)

  • void shuffle(List list):隨機(jī)排序

  • void swap(List list, int i , int j)):交換兩個索引位置的元素

  • void rotate(List list, int distance)):旋轉(zhuǎn)。當(dāng)distance為正數(shù)時,將list后distance個元素整體移到前面。當(dāng)distance為負(fù)數(shù)時杖们,將 list的前distance個元素整體移到后面枣购。

public static <T extends Comparable<? super T>> void sort(List<T> list)
 
public static <T> void sort(List<T> list,Comparator<? super T> c)

使用List時想根據(jù)List中存儲對象的某一字段進(jìn)行排序潭陪,那么我們要用到Collections.sort方法對list排序,用Collections.sort方法對list排序有兩種方法:

  • 第一種是list中的對象實現(xiàn)Comparable接口赵讯;
  • 第二種方法是根據(jù)Collections.sort重載方法來實現(xiàn)栏赴。
public class SortTest {
    public static void main(String[] args) {
        List<String> listS = new ArrayList<String>();
        List<Employer1> list1 = new ArrayList<Employer1>();
        List<Employer2> list2 = new ArrayList<Employer2>();
        List<Employer3> list3 = new ArrayList<Employer3>();
        
        //一.將String類型的變量插入到listS中并排序
        //listS中的對象String 本身含有compareTo方法蘑斧,所以可以直接調(diào)用sort方法,按自然順序排序须眷,即升序排序
        listS.add("5");
        listS.add("2");
        listS.add("9");
        Collections.sort(listS);
        
        //二.將Employer1類的對象插入到list1中并排序
        //將已創(chuàng)建的實現(xiàn)了Comparator接口的比較類MyCompare傳入Collections的sort方法中即可實現(xiàn)依照MyCompare類中的比較規(guī)則竖瘾。
        Employer1 a1 = new Employer1();
        Employer1 b1 = new Employer1();
        Employer1 c1 = new Employer1();
        a1.setName("a1");   a1.setAge(44);
        b1.setName("b1");   b1.setAge(55);
        c1.setName("b1");   c1.setAge(33);
        list1.add(a1);
        list1.add(b1);
        list1.add(c1);
        //Collections類的sort方法要求傳入的第二個參數(shù)是一個已實現(xiàn)Comparator接口的比較器
        Collections.sort(list1, new MyCompare());

        //三.將Employer2類的對象插入到list2中并排序
        //其實原理和上面的二類似,只是沒有單獨創(chuàng)建MyCompare類花颗,而是用匿名內(nèi)部類來實現(xiàn)Comparator接口里面的具體比較准浴。
        Employer2 a2 = new Employer2();
        Employer2 b2 = new Employer2();
        Employer2 c2 = new Employer2();
        a2.setName("a2");   a2.setAge(66);
        b2.setName("b2");   b2.setAge(33);
        c2.setName("b2");   c2.setAge(22);
        list2.add(a2);
        list2.add(b2);
        list2.add(c2); 
        //Collections類的sort方法要求傳入的第二個參數(shù)是一個已實現(xiàn)Comparator接口的比較器
        Collections.sort(list2,new Comparator<Employer2>(){
            @Override
            public int compare(Employer2 a2, Employer2 b2) {
                return a2.getOrder().compareTo(b2.getOrder());
            }

        });

        //四.將Employer3類的對象插入到list3中并排序
        //被排序的類Employer3實現(xiàn)了Comparable接口,在類Employer3中通過重載compareTo方法來實現(xiàn)具體的比較。
        Employer3 a3 = new Employer3();
        Employer3 b3 = new Employer3();
        Employer3 c3 = new Employer3();
        a3.setName("a3");   a3.setAge(77);
        b3.setName("b3");   b3.setAge(55);
        c3.setName("b3");   c3.setAge(99);
        list3.add(a3);
        list3.add(b3);
        list3.add(c3);
        Collections.sort(list3);
        //Collections類的sort方法要求傳入的List中的對象是已實現(xiàn)Comparable接口的對象

        System.out.println(listS);
        System.out.println(list1);
        System.out.println(list3);
        System.out.println(list2);
    }
}
class Employer1{
    private String name;
    private Integer age;
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override//重載了Object類里的toString方法捎稚,使之可以按照我們要求的格式打印
    public String toString() {
        return "name is "+name+" age is "+ age;
    }
}
class MyCompare implements Comparator<Employer1> {
    @Override//重載了Comparator接口里面的compare方法實現(xiàn)具體的比較
    public int compare(Employer1 o1, Employer1 o2) {
        return o1.getAge().compareTo(o2.getAge());
    }
}
class Employer2{
    private String name;
    private Integer age;
    public void setName(String name) {
        this.name = name;
    }
    public Integer getOrder() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override//重載了Object類里的toString方法,使之可以按照我們要求的格式打印
    public String toString() {
        return "name is "+name+" age is "+age;
    }
}
class Employer3 implements Comparable<Employer3>{
    private String name;
    private Integer age;
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override//重載了Object類里的toString方法求橄,使之可以按照我們要求的格式打印
    public String toString() {
        return "name is "+name+" age is "+age;
    }
    @Override//重載了Comparable接口里的compareTo方法來實現(xiàn)具體的比較
    public int compareTo(Employer3 a) {
        return this.age.compareTo(a.getAge());
    }
}

compareble接口

Arrays.sort()方法可對任何實現(xiàn)compareble接口的對象數(shù)組排序, 像Integer,String,這兩種引用類型都實現(xiàn)了compareble接口今野,所以這兩種類型的數(shù)組都可直接使用Arrays.sort()進(jìn)行排序

該接口對實現(xiàn)它的每個類的對象強加一個整體排序。這個排序被稱為類的自然排序 罐农,類的compareTo方法被稱為其自然比較方法 条霜。

compareTo()

由上面的程序我們可以看出,無論是實現(xiàn)了Comparable接口的方法還是實現(xiàn)了Comparator接口的方法涵亏,最終比較的返回值都是通過compareTo方法實現(xiàn)的宰睡,故就把compareTo方法單獨拿出來做個小結(jié)。

compareTo()的返回值是整型气筋,它是先比較對應(yīng)字符的大小(ASCII碼順序)拆内,如果第一個字符和參數(shù)的第一個字符不等,結(jié)束比較宠默,返回他們之間的差值麸恍,如果第一個字符和參數(shù)的第一個字符相等,則以第二個字符和參數(shù)的第二個字符做比較,以此類推抹沪,直至比較的字符或被比較的字符有一方全比較完刻肄,這時就比較字符的長度。例如:

String s1 = "abc"; 
String s2 = "abcd"; 
String s3 = "abcdfg"; 
String s4 = "1bcdfg"; 
String s5 = "cdfg"; 
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1長度小1) 
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1長度小3) 
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII碼是97,"1"的的ASCII碼是49,所以返回48) 
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII碼是97,"c"的ASCII碼是99,所以返回-2)

查找融欧,替換操作

  • int binarySearch(List list, Object key):對List進(jìn)行二分查找敏弃,返回索引,注意List必須是有序的

  • int max(Collection coll):根據(jù)元素的自然順序噪馏,返回最大的元素麦到。 類比int min(Collection coll)

  • int max(Collection coll, Comparator c):根據(jù)定制排序,返回最大元素逝薪,排序規(guī)則由Comparatator類控制隅要。類比int min(Collection coll, Comparator c)

  • void fill(List list, Object obj):用元素obj填充list中所有元素

  • int frequency(Collection c, Object o):統(tǒng)計元素出現(xiàn)次數(shù)

  • int indexOfSubList(List list, List target):統(tǒng)計targe在list中第一次出現(xiàn)的索引,找不到則返回-1董济,類比int lastIndexOfSubList(List source, list target).

  • boolean replaceAll(List list, Object oldVal, Object newVal):用新元素替換舊元素步清。

同步控制

Collections中幾乎對每個集合都定義了同步控制方法,例如 SynchronizedList(), SynchronizedSet()等方法虏肾,來將集合包裝成線程安全的集合廓啊。

List list = Collections. synchronizedList(new ArrayList()); 
Set set = Collections. synchronizedSet(new HashSet()); 
Map map = Collections. synchronizedMap(new HashMap()); 

Arrays類

該類包含用于操作數(shù)組的各種方法(如排序和搜索)。 該類還包含一個靜態(tài)工廠封豪,可以將數(shù)組視為List谴轮。

asList(T... a)

由給定的數(shù)組a,返回一個固定大小的List對象吹埠。在這里第步,著重解釋一下前面這句話的深層含義,我們可以看Arrays類的源碼缘琅,來幫助我們理解粘都。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刷袍,隨后出現(xiàn)的幾起案子翩隧,更是在濱河造成了極大的恐慌,老刑警劉巖呻纹,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堆生,死亡現(xiàn)場離奇詭異,居然都是意外死亡雷酪,警方通過查閱死者的電腦和手機(jī)淑仆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來太闺,“玉大人糯景,你說我怎么就攤上這事。” “怎么了蟀淮?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵最住,是天一觀的道長。 經(jīng)常有香客問我怠惶,道長涨缚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任策治,我火速辦了婚禮脓魏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘通惫。我一直安慰自己茂翔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布履腋。 她就那樣靜靜地躺著珊燎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遵湖。 梳的紋絲不亂的頭發(fā)上悔政,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音延旧,去河邊找鬼谋国。 笑死,一個胖子當(dāng)著我的面吹牛迁沫,可吹牛的內(nèi)容都是我干的芦瘾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼集畅,長吁一口氣:“原來是場噩夢啊……” “哼旅急!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牡整,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溺拱,沒想到半個月后逃贝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡迫摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年沐扳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片句占。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡沪摄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杨拐,我是刑警寧澤祈餐,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站哄陶,受9級特大地震影響帆阳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屋吨,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一蜒谤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧至扰,春花似錦鳍徽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翎猛,卻和暖如春胖翰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背切厘。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工萨咳, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫稿。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓培他,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遗座。 傳聞我的和親對象是個殘疾皇子舀凛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第十天 權(quán)限修飾符 public protected default private 同一類 true true ...
    炙冰閱讀 540評論 0 1
  • 四、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列途蒋,叫字符串猛遍。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 756評論 0 2
  • 一、基礎(chǔ)知識:1号坡、JVM懊烤、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,383評論 0 4
  • Java 集合類是一種特別有用的工具類,大致可分為Set宽堆、List腌紧、Queue、Map四種體系畜隶。 Set代表無序壁肋、...
    ifeelok0319閱讀 291評論 0 0
  • Java 語言支持的類型分為兩類:基本類型和引用類型号胚。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,349評論 0 10