华南俳烁实业有限公司

java

當前位置:中華考試網(wǎng) >> java >> java基礎 >> 文章內(nèi)容

JavaCollections類操作集合詳解

來源:中華考試網(wǎng)  [2020年11月18日]  【

  Collections 類是 Java 提供的一個操作 Set、List 和 Map 等集合的工具類。Collections 類提供了許多操作集合的靜態(tài)方法,借助這些靜態(tài)方法可以實現(xiàn)集合元素的排序、查找替換和復制等操作。下面介紹 Collections 類中操作集合的常用方法。

  排序(正向和逆向)

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

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

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

  void sort(List list):根據(jù)元素的自然順序?qū)χ付?List 集合的元素按升序進行排序。

  void sort(List list, Comparator c):根據(jù)指定 Comparator 產(chǎn)生的順序?qū)?List 集合元素進行排序。

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

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

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

  例 1

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

  具體實現(xiàn)代碼如下:

  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); // 調(diào)用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 個商品名稱進行反轉(zhuǎn)排序,并輸出排序后的商品信息。具體的實現(xiàn)代碼如下:

  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); // 調(diào)用reverse()方法對集合元素進行反轉(zhuǎn)排序

  System.out.println("按錄入時間的先后順序進行降序排列為:");

  for (int i = 0; i < 5; i++) {

  System.out.print(students.get(i) + "\t");

  }

  }

  }

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

  填寫下面表單即可預約申請免費試聽java課程!害怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可全國推薦就業(yè)!

預約申請免費聽java課程

  • 地區(qū):
  • 姓名:
  • 手機:

  執(zhí)行該程序,輸出結果如下所示。

  ******** 商品信息 ********

  請輸入第 1 個商品的名稱:

  果粒橙

  請輸入第 2 個商品的名稱:

  冰紅茶

  請輸入第 3 個商品的名稱:

  礦泉水

  請輸入第 4 個商品的名稱:

  軟面包

  請輸入第 5 個商品的名稱:

  巧克力

  按錄入時間的先后順序進行降序排列為:

  巧克力 軟面包 礦泉水 冰紅茶 果粒橙

  查找、替換操作

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

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

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

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

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

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

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

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

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

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

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

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

  例 3

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

  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 集合中,然后調(diào)用 Collections 類中的 fill() 方法將該集合中的所有元素值替換為“未填寫”。最后使用 for 循環(huán)將替換后的集合元素輸出。

  運行該程序,執(zhí)行結果如下所示。

  ******** 商品信息 ********

  請輸入第 1 個商品的名稱:

  蘇打水

  請輸入第 2 個商品的名稱:

  礦泉水

  請輸入第 3 個商品的名稱:

  冰紅茶

  重置商品信息,將所有名稱都更改為'未填寫'

  重置后的商品信息為:

  未填寫 未填寫 未填寫

  例 4

  在一個集合中保存 4 個數(shù)據(jù),分別輸出最大最小元素和指定數(shù)據(jù)在集合中出現(xiàn)的次數(shù)。

  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集合中出現(xiàn)的次數(shù),返回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 個數(shù)據(jù),然后調(diào)用 Collections 類中的 max() 和 min() 方法輸出集合中的最大最小元素,replaceAll() 替換元素,frequency() 判斷指定數(shù)據(jù)在 List 集合中出現(xiàn)的次數(shù),最后用 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 dest,List src)

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

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

  例 5

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

  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);

  }

  // 調(diào)用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 個元素,然后調(diào)用 Collections 類中 copy() 方法將 srcList 集合中的全部元素復制到 destList 集合中。由于 destList 集合中含有 5 個元素,故最后兩個元素不會被覆蓋。

  運行該程序,具體的執(zhí)行結果如下所示。

  原有商品如下:

  蘇打水

  木糖醇

  方便面

  火腿腸

  冰紅茶

  輸入替換的商品名稱:

  第 1 個商品:

  燕麥片

  第 2 個商品:

  八寶粥

  第 3 個商品:

  軟面包

  當前商品有:

  燕麥片 八寶粥 軟面包 火腿腸 冰紅茶

責編:fushihao

上一篇:Java遍歷Map集合的四種方式

下一篇: 沒有了

  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學歷考試
福清市| 凉城县| 盘山县| 宁乡县| 潮州市| 彭山县| 新化县| 莱阳市| 黑龙江省| 临高县| 休宁县| 黑河市| 米脂县| 揭东县| 萍乡市| 渭源县| 新绛县| 万宁市| 门源| 仙桃市| 雅江县| 武安市| 中牟县| 尼玛县| 高雄市| 平凉市| 江口县| 屯昌县| 茌平县| 始兴县| 张家界市| 淮阳县| 南平市| 静乐县| 铜梁县| 资溪县| 砚山县| 廊坊市| 景德镇市| 安溪县| 会同县|