Java中Collections類的功能有哪些-創(chuàng)新互聯

本篇文章給大家分享的是有關Java中Collections類的功能有哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯建站專注于企業(yè)全網營銷推廣、網站重做改版、通渭網站定制設計、自適應品牌網站建設、H5建站、商城開發(fā)、集團公司官網建設、外貿營銷網站建設、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為通渭等各大城市提供網站開發(fā)制作服務。

1) 排序(Sort)


    使用sort方法可以根據元素的自然順序,對指定列表進行排序。列表中的所有元素都必須實現 Comparable 接口?;虼肆斜韮鹊乃性囟急仨毷鞘褂弥付ū容^器可相互比較的   Collections.sort(list , new Comparator(){ } );


2) 混排(Shuffling)
    混排算法所做的正好與 sort 相反: 它打亂在一個 List 中可能有的任何排列的蹤跡。也就是說,基于隨機源的輸入重排該 List, 這樣的排列具有相同的可能性(假設隨機源是公正的)。這個算法在實現一個碰運氣的游戲中是非常有用的。例如,它可被用來混排代表一副牌的 Card 對象的一個 List 。另外,在生成測試案例時,它也是十分有用的。Collections.Shuffling(list)


3) 反轉(Reverse)
    使用Reverse方法可以將元素進行反轉。Collections.reverse(list)


4) 替換所有的元素(Fill)
     使用指定元素替換指定列表中的所有元素。Collections.fill(li,"aaa");


5) 拷貝(Copy)
    用兩個參數,一個目標 List 和一個源 List, 將源的元素拷貝到目標,并覆蓋它的內容。目標 List 至少與源一樣長。如果它更長,則在目標 List 中的剩余元素不受影響。Collections.copy(list,li): 后面一個參數是目標列表 ,前一個是源列表


6) 返回Collections中最小元素(min)
    根據指定比較器產生的順序,返回給定 collection 的最小元素。collection 中的所有元素都必須是通過指定比較器可相互比較的Collections.min(list)


7) 返回Collections中較大元素(max)
     根據指定比較器產生的順序,返回給定 collection 的較大元素。collection 中的所有元素都必須是通過指定比較器可相互比較的Collections.max(list)


8) lastIndexOfSubList
    返回指定源列表中最后一次出現指定目標列表的起始位置,int count = Collections.lastIndexOfSubList(list,li);


9) IndexOfSubList
    返回指定源列表中第一次出現指定目標列表的起始位置,int count = Collections.indexOfSubList(list,li);


10) Rotate
根據指定的距離循環(huán)移動指定列表中的元素,Collections.rotate(list,-1);如果是負數,則正向移動,正數則方向移動


排序(正向和逆向)

Collections 提供了如下方法用于對 List 集合元素進行排序。

  • void reverse(List list):對指定 List 集合元素進行逆向排序。

  • void shuffle(List list):對 List 集合元素進行隨機排序(shuffle 方法模擬了“洗牌”動作)。

  • void sort(List list):根據元素的自然順序對指定 List 集合的元素按升序進行排序。

  • void sort(List list, Comparator c):根據指定 Comparator 產生的順序對 List 集合元素進行排序。

  • void swap(List list, int i, int j):將指定 List 集合中的 i 處元素和 j 處元素進行交換。

  • void rotate(List list, int distance):當 distance 為正數時,將 list 集合的后 distance 個元素“整體”移到前面;當 distance 為負數時,將 list 集合的前 distance 個元素“整體”移到后面。該方法不會改變集合的長度。

下面程序簡單示范了利用 Collections 工具類來操作 List 集合。


例 1


編寫一個程序,對用戶輸入的 5 個商品價格進行排序后輸出。這里要求使用 Collections 類中 sort() 方法按從低到高的順序對其進行排序,最后將排序后的成績輸出。

具體實現代碼如下:


public class Test1 {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    List prices = new ArrayList();
    for (int i = 0; i < 5; i++) {
      System.out.println("請輸入第 " + (i + 1) + " 個商品的價格:");
      int p = input.nextInt();
      prices.add(Integer.valueOf(p)); // 將錄入的價格保存到List集合中
    }
    Collections.sort(prices); // 調用sort()方法對集合進行排序
    System.out.println("價格從低到高的排列為:");
    for (int i = 0; i < prices.size(); i++) {
      System.out.print(prices.get(i) + "\t");
    }
  }
}

如上述代碼,循環(huán)錄入 5 個價格,并將每個價格都存儲到已定義好的 List 集合 prices 中,然后使用 Collections 類的 sort() 方法對該集合元素進行升序排序。最后使用 for 循環(huán)遍歷 users 集合,輸出該集合中的元素。

該程序的執(zhí)行結果如下所示。
請輸入第 1 個商品的價格:
85
請輸入第 2 個商品的價格:
48
請輸入第 3 個商品的價格:
66
請輸入第 4 個商品的價格:
80
請輸入第 5 個商品的價格:
18
價格從低到高的排列為:
18    48    66    80    85


例 2


循環(huán)錄入 5 個商品的名稱,并按錄入時間的先后順序進行降序排序,即后錄入的先輸出。

下面編寫程序,使用 Collections 類的 reverse() 方法對保存到 List 集合中的 5 個商品名稱進行反轉排序,并輸出排序后的商品信息。具體的實現代碼如下:


public class Test2 {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    List students = new ArrayList();
    System.out.println("******** 商品信息 ********");
    for (int i = 0; i < 5; i++) {
      System.out.println("請輸入第 " + (i + 1) + " 個商品的名稱:");
      String name = input.next();
      students.add(name); // 將錄入的商品名稱存到List集合中
    }
    Collections.reverse(students); // 調用reverse()方法對集合元素進行反轉排序
    System.out.println("按錄入時間的先后順序進行降序排列為:");
    for (int i = 0; i < 5; i++) {
      System.out.print(students.get(i) + "\t");
    }
  }
}

如上述代碼,首先循環(huán)錄入 5 個商品的名稱,并將這些名稱保存到 List 集合中,然后調用 Collections 類中的 reverse() 方法對該集合元素進行反轉排序。最后使用 for 循環(huán)將排序后的集合元素輸出。

執(zhí)行該程序,輸出結果如下所示。
******** 商品信息 ********
請輸入第 1 個商品的名稱:
果粒橙
請輸入第 2 個商品的名稱:
冰紅茶
請輸入第 3 個商品的名稱:
礦泉水
請輸入第 4 個商品的名稱:
軟面包
請輸入第 5 個商品的名稱:
巧克力
按錄入時間的先后順序進行降序排列為:
巧克力    軟面包    礦泉水    冰紅茶    果粒橙


查找、替換操作

Collections 還提供了如下常用的用于查找、替換集合元素的方法。

  • int binarySearch(List list, Object key):使用二分搜索法搜索指定的 List 集合,以獲得指定對象在 List 集合中的索引。如果要使該方法可以正常工作,則必須保證 List 中的元素已經處于有序狀態(tài)。

  • Object max(Collection coll):根據元素的自然順序,返回給定集合中的較大元素。

  • Object max(Collection coll, Comparator comp):根據 Comparator 指定的順序,返回給定集合中的較大元素。

  • Object min(Collection coll):根據元素的自然順序,返回給定集合中的最小元素。

  • Object min(Collection coll, Comparator comp):根據 Comparator 指定的順序,返回給定集合中的最小元素。

  • void fill(List list, Object obj):使用指定元素 obj 替換指定 List 集合中的所有元素。

  • int frequency(Collection c, Object o):返回指定集合中指定元素的出現次數。

  • int indexOfSubList(List source, List target):返回子 List 對象在父 List 對象中第一次出現的位置索引;如果父 List 中沒有出現這樣的子 List,則返回 -1。

  • int lastIndexOfSubList(List source, List target):返回子 List 對象在父 List 對象中最后一次出現的位置索引;如果父 List 中沒有岀現這樣的子 List,則返回 -1。

  • boolean replaceAll(List list, Object oldVal, Object newVal):使用一個新值 newVal 替換 List 對象的所有舊值 oldVal。

下面程序簡單示范了 Collections 工具類的用法。


例 3


編寫一個程序,要求用戶輸入 3 個商品名稱,然后使用 Collections 類中的 fill() 方法對商品信息進行重置操作,即將所有名稱都更改為“未填寫”。具體的實現代碼如下:


public class Test3 {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    List products = new ArrayList();
    System.out.println("******** 商品信息 ********");
    for (int i = 0; i < 3; i++) {
      System.out.println("請輸入第 " + (i + 1) + " 個商品的名稱:");
      String name = input.next();
      products.add(name); // 將用戶錄入的商品名稱保存到List集合中
    }
    System.out.println("重置商品信息,將所有名稱都更改為'未填寫'");
    Collections.fill(products, "未填寫");
    System.out.println("重置后的商品信息為:");
    for (int i = 0; i < products.size(); i++) {
      System.out.print(products.get(i) + "\t");
    }
  }
}

如上述代碼,首先循環(huán)錄入 3 個商品名稱,并將這些商品信息存儲到 List 集合中,然后調用 Collections 類中的 fill() 方法將該集合中的所有元素值替換為“未填寫”。最后使用 for 循環(huán)將替換后的集合元素輸出。

運行該程序,執(zhí)行結果如下所示。
******** 商品信息 ********
請輸入第 1 個商品的名稱:
蘇打水
請輸入第 2 個商品的名稱:
礦泉水
請輸入第 3 個商品的名稱:
冰紅茶
重置商品信息,將所有名稱都更改為'未填寫'
重置后的商品信息為:
未填寫    未填寫    未填寫


例 4


在一個集合中保存 4 個數據,分別輸出較大最小元素和指定數據在集合中出現的次數。


public class Test4 {
  public static void main(String[] args) {
    ArrayList nums = new ArrayList();
    nums.add(2);
    nums.add(-5);
    nums.add(3);
    nums.add(0);
    System.out.println(nums); // 輸出:[2, -5, 3, 0]
    System.out.println(Collections.max(nums)); // 輸出較大元素,將輸出 3
    System.out.println(Collections.min(nums)); // 輸出最小元素,將輸出-5
    Collections.replaceAll(nums, 0, 1);// 將 nums中的 0 使用 1 來代替
    System.out.println(nums); // 輸出:[2, -5, 3, 1]
    // 判斷-5在List集合中出現的次數,返回1
    System.out.println(Collections.frequency(nums, -5));
    Collections.sort(nums); // 對 nums集合排序
    System.out.println(nums); // 輸出:[-5, 1, 2, 3]
    // 只有排序后的List集合才可用二分法查詢,輸出3
    System.out.println(Collections.binarySearch(nums, 3));
  }
}

如上述代碼,向 List 集合中添加 4 個數據,然后調用 Collections 類中的 max() 和 min() 方法輸出集合中的較大最小元素,replaceAll() 替換元素,frequency() 判斷指定數據在 List 集合中出現的次數,最后用 binarySearch() 進行二分法查詢。

運行上述程序,執(zhí)行結果如下:
[2, -5, 3, 0]
3
-5
[2, -5, 3, 1]
1
[-5, 1, 2, 3]
3

復制

Collections 類的 copy() 靜態(tài)方法用于將指定集合中的所有元素復制到另一個集合中。執(zhí)行 copy() 方法后,目標集合中每個已復制元素的索引將等同于源集合中該元素的索引。

copy() 方法的語法格式如下:


void copy(List <? super T> dest,List<? extends T> src)

其中,dest 表示目標集合對象,src 表示源集合對象。

注意:目標集合的長度至少和源集合的長度相同,如果目標集合的長度更長,則不影響目標集合中的其余元素。如果目標集合長度不夠而無法包含整個源集合元素,程序將拋出 IndexOutOfBoundsException 異常。


例 5


在一個集合中保存了 5 個商品名稱,現在要使用 Collections 類中的 copy() 方法將其中的 3 個替換掉。具體實現的代碼如下:


public class Test5 {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    List srcList = new ArrayList();
    List destList = new ArrayList();
    destList.add("蘇打水");
    destList.add("木糖醇");
    destList.add("方便面");
    destList.add("火腿腸");
    destList.add("冰紅茶");
    System.out.println("原有商品如下:");
    for (int i = 0; i < destList.size(); i++) {
      System.out.println(destList.get(i));
    }
    System.out.println("輸入替換的商品名稱:");
    for (int i = 0; i < 3; i++) {
      System.out.println("第 " + (i + 1) + " 個商品:");
      String name = input.next();
      srcList.add(name);
    }
    // 調用copy()方法將當前商品信息復制到原有商品信息集合中
    Collections.copy(destList, srcList);
    System.out.println("當前商品有:");
    for (int i = 0; i < destList.size(); i++) {
      System.out.print(destList.get(i) + "\t");
    }
  }
}

如上述代碼,首先創(chuàng)建了兩個 List 對象 srcList 和 destList,并向 destList 集合中添加了 5 個元素,向 srcList 集合中添加了 3 個元素,然后調用 Collections 類中 copy() 方法將 srcList 集合中的全部元素復制到 destList 集合中。由于 destList 集合中含有 5 個元素,故最后兩個元素不會被覆蓋。

運行該程序,具體的執(zhí)行結果如下所示。
原有商品如下:
蘇打水
木糖醇
方便面
火腿腸
冰紅茶
輸入替換的商品名稱:
第 1 個商品:
燕麥片
第 2 個商品:
八寶粥
第 3 個商品:
軟面包
當前商品有:
燕麥片    八寶粥    軟面包    火腿腸    冰紅茶


以上就是Java中Collections類的功能有哪些,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯行業(yè)資訊頻道。

當前文章:Java中Collections類的功能有哪些-創(chuàng)新互聯
網站地址:http://muchs.cn/article28/dodsjp.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站收錄自適應網站、品牌網站設計網站維護、關鍵詞優(yōu)化網站導航

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都定制網站網頁設計