Java學習之集合工具類

一肪跋、Util 工具類

工具類的Collections和Arrays中的方法全是靜態(tài)的烟零,下面主要總結(jié)幾個比較重要的方法媒役。

1仪际、Collections工具類:

在Collections工具類中很多方法是用于對List集合進行操作的围小,如比較,查找树碱,隨機排序等等
1肯适、集合的各種方法:
1)查找:
T max(Collection<? extends T> coll) ---> 根據(jù)集合的自然順序,獲取coll集合中的最大元素
T max(Collection<? extends T> coll,Comparator<? super T> comp) ---> 根據(jù)指定比較器comp的順序成榜,獲取coll集合中的最大元素
int binarySearch(Lsit<? extends Comparable<? super T>> list,Tkey) ---> 二分法搜索list集合中的指定對象
2)替換:
void fill(List<? super T> list, T obj) ---> 將list集合中的全部元素替換成指定對象obj
boolean replaceAll(List<T> lsit,T oldVal,T newVal) ---> 使用newVal替換list集合中的oldVal值

3)排序:
void shuffle(List<?> list) ---> 使用默認隨機源對list集合中的元素進行隨機排序
void sort(Lsit<T> list) ---> 根據(jù)自然順序?qū)ist集合中的元素進行排序
void sort(List<T> lsit,Comparator<? super T> c) ---> 根據(jù)指定比較器c的排序方式對list集合進行排序

4)反轉(zhuǎn)
reverse(List<?> list) ---> 反轉(zhuǎn)list集合中元素的順序
Comparator reverseOrder() ---> 返回一個比較器框舔,強行逆轉(zhuǎn)了實現(xiàn)Comparable接口的對象的自然順序
Comparator reverseOrder(Comparator<T> cmp) ---> 返回一個比較器,強行逆轉(zhuǎn)了指定比較器的順序

示例:

    ......  
    public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  
    //定義比較器  
    class StrLenCom implements Comparator<String>  
    {  
        public int compare(String s1,String s2)  
        {  
            int n = new Integer(s1.length()).compareTo(new Integer(s2.length()));  
            if (n == 0)  
                return s1.compareTo(s2);  
            return n;  
        }  
    }  
    ......  
        List<String> list = new ArrayList<String>();  
        list.add("abd");  
        list.add("cd");  
        list.add("f");  
        list.add("yyyy");  
        list.add("abd");  
        //打印原集合  
        sop(list);  
        sop("--------------排序-------------------");  
        //隨機排序:  
        Collections.shuffle(list);  
        sop("隨機排序:" + list);  
        //對元素排序赎婚,存入的對象必須具備比較性  
        Collections.sort(list);  
        //打印新集合  
        sop("自然排序后的集合元素:" + list);  
        //按指定比較器順序排序  
        Collections.sort(list,new StrLenCom());  
        sop("長度排序:" + list);  
        sop("------------獲取最大元素-----------------");  
        //獲取最大元素  
        String max = Collections.max(list);  
        sop("max = " + max);  
        sop("--------------查找--------------------");  
        int index = Collections.binarySearch(list,"acd");  
        sop("二分法查找值:" + index);  
        int ex = half(list,"acd");  
        sop("二分法查找值:" + ex);  
        Collections.sort(list,new StrLenCom());  
        sop("排序后的集合元素:" + list);  
        int x = half2(list,"acd",new StrLenCom());  
        sop("二分法查找值:" + x);  
        sop("---------------替換-反轉(zhuǎn)----------------");  
        //反轉(zhuǎn)  
        Collections.reverse(list);  
        sop("反轉(zhuǎn)后:" + list);  
        //替換  
        Collections.fill(list,"pp");  
        sop("替換后:" + list);  
    ......

創(chuàng)建部分替換方法:

//替換部分字符  
    public static void fillPart(List<String> list,int start,int end,String str)  
    {  
        List<String> li = new ArrayList<String>();  
        for(int i=start;i<end;i++)  
        {  
            li.add(list.get(i));  
            list.remove(list.get(i));  
        }  
        sop(list);  
        Collections.fill(li,str);  
        list.addAll(start,li);  
    }  
}

2刘绣、Arrays工具類:

1、Lsit<T> asList(T... a) ---> 將數(shù)組轉(zhuǎn)換為集合

注意:
將數(shù)組轉(zhuǎn)換成集合挣输,不可使用集合的增刪方法纬凤,因為數(shù)組的長度是固定的,如果進行增刪操作撩嚼,則會產(chǎn)生UnsupportedOperationException的編譯異常停士。
a.如果數(shù)組中的元素都是對象挖帘,則變成集合時,數(shù)組中的元素就直接轉(zhuǎn)為集合中的元素
b.如果數(shù)組中的元素都是基本數(shù)據(jù)類型恋技,那么會將該數(shù)組作為集合中的元素存在

2肠套、binarySearch():查找方法,fill():替換方法猖任,sort():排序方法等
特點:可對數(shù)組元素進行相應(yīng)操作你稚,可以接受除boolean之外的其他各種基本數(shù)據(jù)類型及有序的引用類型數(shù)組的參數(shù),且還可以對指定元素的范圍朱躺,并可根據(jù)指定比較器進行相應(yīng)的操作

如:
sort(T[] a,Comparator<? super T> c)
fill(int[]a,int from,int to)

3刁赖、String toString() 可以接收各種數(shù)組類型參數(shù),并返回指定數(shù)組內(nèi)容的字符串表現(xiàn)形式

4长搀、集合轉(zhuǎn)為數(shù)組
void toString(String[] s) ---> 將集合轉(zhuǎn)為指定數(shù)組s宇弛,并可通過Arrays.toString(s)獲取數(shù)組s中的元素

1)指定類型的數(shù)組定義的長度:
a.當指定類型的數(shù)組長度小于了集合的size,那么該方法內(nèi)部會創(chuàng)建一個新的數(shù)組源请,長度為集合的size
b.當指定類型的數(shù)組長度大于了集合的size枪芒,就不會創(chuàng)建數(shù)組,而是使用傳遞進來的數(shù)組谁尸,并且多出的元素的值為null

2)為何將集合轉(zhuǎn)為數(shù)組:為了限定對集合中元素的操作舅踪,如增刪,因為想對創(chuàng)建的集合不做增刪方面的操作良蛮。

示例:

    ......  
    public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  
    ......  
    int[] arr = {5,8,6};  
    sop("toString : int[]轉(zhuǎn)為集合:" + Arrays.toString(arr));  
      
    String[] sarr = {"ac","eg","nse","gui"};  
    List<String> list = Arrays.asList(sarr);  
    sop("asList--String對象數(shù)組轉(zhuǎn)集合:" + list);  
  
    List<int[]> li = Arrays.asList(arr);  
    sop("asList--int[]轉(zhuǎn)集合:" + li);  
    Integer[] iarr = {5,8,6};  
    List<Integer> lis = Arrays.asList(iarr);  
    sop("asList--Integer[]轉(zhuǎn)集合:" + lis);  
    ......

集合轉(zhuǎn)數(shù)組:

        ArrayList<String> as = new ArrayList<String>();  
        as.add("01");  
        as.add("02");  
        as.add("03");  
        sop("原集合" + as);  
        String[] s = new String[as.size()];  
        as.toArray(s);  
        sop("新數(shù)組" + Arrays.toString(s));

二抽碌、小知識點

1、增強for循環(huán)

1决瞳、格式:
for(數(shù)據(jù)類型 變量名 : 被遍歷的集合(Collection)或數(shù)組){執(zhí)行語句}

2货徙、說明:
1)對集合進行遍歷,只能獲取集合的元素皮胡,但是不能對集合進行操作痴颊。
2)迭代器除了遍歷外,還可進行remove集合中元素的操作屡贺,如果使用ListIterator蠢棱,還可在遍歷過程中,對集合進行增刪改查的操作烹笔。

3裳扯、傳統(tǒng)for循環(huán)和增強for循環(huán)區(qū)別:
增強for循環(huán)有局限性。必須有被遍歷的目標谤职;而傳統(tǒng)for循環(huán)有索引。所以建議在遍歷數(shù)組時亿鲜,使用傳統(tǒng)for循環(huán)允蜈。

示例:

import java.util.*;  
class ForEachDemo  
{  
    //打印方法  
    public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  
  
    //測試  
    public static void main(String[] args)   
    {  
        //創(chuàng)建集合  
        ArrayList<String> as = new ArrayList<String>();  
        as.add("01-a");  
        as.add("02-b");  
        as.add("03-c");  
        System.out.println("原集合" + as);  
        //增強for循環(huán)取出元素  
        for (String s : as)  
        {  
            System.out.println(s);  
        }  
        System.out.println("-------------------------");  
        //創(chuàng)建HashMap集合  
        HashMap<Integer,String> hm = new HashMap<Integer,String>();  
        hm.put(1,"a");  
        hm.put(2,"b");  
        hm.put(3,"c");  
        hm.put(4,"d");  
        System.out.println("hm原集合:" + hm);  
        //增強for循環(huán)的兩種方式測試  
        //keySet方法  
        sop("keySet方法:|--");  
        for(Integer i : hm.keySet())  
        {  
            sop(i + ":-" + hm.get(i));            
        }  
        //entrySet方法  
        sop("entrySet方法--");  
        for(Map.Entry<Integer,String> me : hm.entrySet())  
        {  
            sop(me.getKey() + "-->" + me.getValue());  
        }  
    }  
}

2冤吨、可變參數(shù):

如果在參數(shù)列表中傳入多個參數(shù),個數(shù)不確定饶套,每次都要復(fù)寫該方法漩蟆,可變參數(shù)的出現(xiàn)就可以省去復(fù)寫的麻煩,而直接對數(shù)組進行操作

注意:可變參數(shù)一定要定義在參數(shù)列表的后面妓蛮。

示例:

......  
    //1.5版本前寫法  
    public static void show(int a,int b)  
    {  
        System.out.println(a + " :" + b);  
    }  
    //1.5新特性怠李,可加入更多的值  
    public static void show(int... arr)  
    {  
        System.out.println(arr.length);//結(jié)果為數(shù)組arr的長度  
        System.out.println(arr);//arr的地址值  
    }  
    public static void print(String... s)  
    {  
        //遍歷字符串數(shù)組s  
        for(String str : s)  
        {  
            System.out.print(str);  
        }  
        System.out.println();  
    }  
      
    ......

3、靜態(tài)導(dǎo)入:

靜態(tài)導(dǎo)入蛤克,是將類中的所有靜態(tài)成員導(dǎo)入進來捺癞,但需要注意的是,當導(dǎo)入的兩個類中有同名成員時构挤,需要在成員前加上相應(yīng)的類名髓介。
當類名重名時,需要制定具體的包名筋现;當方法名重名時唐础,制定具體所屬的對象或類。

1矾飞、import static java.util.Arrays.*; ---> 寫入的是Arrays類中的所有靜態(tài)成員一膨。

2、import static java.lang.System.*; ---> 導(dǎo)入了System類中的所有靜態(tài)成員

示例:

import java.util.*;  
import static java.util.Arrays.*;//導(dǎo)入的是Arrays類中的所有靜態(tài)成員  
import static java.lang.System.*;//導(dǎo)入的是System類中的所有靜態(tài)成員  
class Demo  
{  
    public static void main(String [] args)  
    {  
        int[] arr = {2,7,6,3};  
        sort(arr);  
        out.println(Arrays.toString(arr));//此處不可省略Arrays洒沦,原因見下  
  
    }  
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汞幢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子微谓,更是在濱河造成了極大的恐慌森篷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豺型,死亡現(xiàn)場離奇詭異仲智,居然都是意外死亡,警方通過查閱死者的電腦和手機姻氨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門钓辆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肴焊,你說我怎么就攤上這事前联。” “怎么了娶眷?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵似嗤,是天一觀的道長。 經(jīng)常有香客問我届宠,道長烁落,這世上最難降的妖魔是什么乘粒? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮伤塌,結(jié)果婚禮上灯萍,老公的妹妹穿的比我還像新娘。我一直安慰自己每聪,他們只是感情好旦棉,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著药薯,像睡著了一般绑洛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上果善,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天诊笤,我揣著相機與錄音,去河邊找鬼巾陕。 笑死讨跟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鄙煤。 我是一名探鬼主播晾匠,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梯刚!你這毒婦竟也來了凉馆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤亡资,失蹤者是張志新(化名)和其女友劉穎澜共,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锥腻,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嗦董,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘦黑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片京革。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖幸斥,靈堂內(nèi)的尸體忽然破棺而出匹摇,到底是詐尸還是另有隱情,我是刑警寧澤甲葬,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布廊勃,位于F島的核電站,受9級特大地震影響演顾,放射性物質(zhì)發(fā)生泄漏供搀。R本人自食惡果不足惜隅居,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一钠至、第九天 我趴在偏房一處隱蔽的房頂上張望葛虐。 院中可真熱鬧,春花似錦棉钧、人聲如沸屿脐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽的诵。三九已至,卻和暖如春佑钾,著一層夾襖步出監(jiān)牢的瞬間西疤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工休溶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留代赁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓兽掰,卻偏偏與公主長得像芭碍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孽尽,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

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