最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Collections類操作集合詳解

 更新時(shí)間:2021年01月21日 09:52:35   作者:C語(yǔ)言中文網(wǎng)  
這篇文章主要介紹了Java Collections類操作集合詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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

1) 排序(Sort)
    使用sort方法可以根據(jù)元素的自然順序,對(duì)指定列表進(jìn)行排序。列表中的所有元素都必須實(shí)現(xiàn) Comparable 接口?;虼肆斜韮?nèi)的所有元素都必須是使用指定比較器可相互比較的   Collections.sort(list , new Comparator(){ } );

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

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

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

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

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

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

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

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

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

排序(正向和逆向)

Collections 提供了如下方法用于對(duì) List 集合元素進(jìn)行排序。

  • void reverse(List list):對(duì)指定 List 集合元素進(jìn)行逆向排序。
  • void shuffle(List list):對(duì) List 集合元素進(jìn)行隨機(jī)排序(shuffle 方法模擬了“洗牌”動(dòng)作)。
  • void sort(List list):根據(jù)元素的自然順序?qū)χ付?List 集合的元素按升序進(jìn)行排序。
  • void sort(List list, Comparator c):根據(jù)指定 Comparator 產(chǎn)生的順序?qū)?List 集合元素進(jìn)行排序。
  • void swap(List list, int i, int j):將指定 List 集合中的 i 處元素和 j 處元素進(jìn)行交換。
  • void rotate(List list, int distance):當(dāng) distance 為正數(shù)時(shí),將 list 集合的后 distance 個(gè)元素“整體”移到前面;當(dāng) distance 為負(fù)數(shù)時(shí),將 list 集合的前 distance 個(gè)元素“整體”移到后面。該方法不會(huì)改變集合的長(zhǎng)度。

下面程序簡(jiǎn)單示范了利用 Collections 工具類來(lái)操作 List 集合。

例 1

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

具體實(shí)現(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("請(qǐng)輸入第 " + (i + 1) + " 個(gè)商品的價(jià)格:");
      int p = input.nextInt();
      prices.add(Integer.valueOf(p)); // 將錄入的價(jià)格保存到List集合中
    }
    Collections.sort(prices); // 調(diào)用sort()方法對(duì)集合進(jìn)行排序
    System.out.println("價(jià)格從低到高的排列為:");
    for (int i = 0; i < prices.size(); i++) {
      System.out.print(prices.get(i) + "\t");
    }
  }
}

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

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

例 2

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

下面編寫程序,使用 Collections 類的 reverse() 方法對(duì)保存到 List 集合中的 5 個(gè)商品名稱進(jìn)行反轉(zhuǎn)排序,并輸出排序后的商品信息。具體的實(shí)現(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("請(qǐng)輸入第 " + (i + 1) + " 個(gè)商品的名稱:");
      String name = input.next();
      students.add(name); // 將錄入的商品名稱存到List集合中
    }
    Collections.reverse(students); // 調(diào)用reverse()方法對(duì)集合元素進(jìn)行反轉(zhuǎn)排序
    System.out.println("按錄入時(shí)間的先后順序進(jìn)行降序排列為:");
    for (int i = 0; i < 5; i++) {
      System.out.print(students.get(i) + "\t");
    }
  }
}

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

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

查找、替換操作

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

  • int binarySearch(List list, Object key):使用二分搜索法搜索指定的 List 集合,以獲得指定對(duì)象在 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 對(duì)象在父 List 對(duì)象中第一次出現(xiàn)的位置索引;如果父 List 中沒有出現(xiàn)這樣的子 List,則返回 -1。
  • int lastIndexOfSubList(List source, List target):返回子 List 對(duì)象在父 List 對(duì)象中最后一次出現(xiàn)的位置索引;如果父 List 中沒有岀現(xiàn)這樣的子 List,則返回 -1。
  • boolean replaceAll(List list, Object oldVal, Object newVal):使用一個(gè)新值 newVal 替換 List 對(duì)象的所有舊值 oldVal。

下面程序簡(jiǎn)單示范了 Collections 工具類的用法。

例 3

編寫一個(gè)程序,要求用戶輸入 3 個(gè)商品名稱,然后使用 Collections 類中的 fill() 方法對(duì)商品信息進(jìn)行重置操作,即將所有名稱都更改為“未填寫”。具體的實(shí)現(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("請(qǐng)輸入第 " + (i + 1) + " 個(gè)商品的名稱:");
      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 個(gè)商品名稱,并將這些商品信息存儲(chǔ)到 List 集合中,然后調(diào)用 Collections 類中的 fill() 方法將該集合中的所有元素值替換為“未填寫”。最后使用 for 循環(huán)將替換后的集合元素輸出。

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

例 4

在一個(gè)集合中保存 4 個(gè)數(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 來(lái)代替
    System.out.println(nums); // 輸出:[2, -5, 3, 1]
    // 判斷-5在List集合中出現(xiàn)的次數(shù),返回1
    System.out.println(Collections.frequency(nums, -5));
    Collections.sort(nums); // 對(duì) nums集合排序
    System.out.println(nums); // 輸出:[-5, 1, 2, 3]
    // 只有排序后的List集合才可用二分法查詢,輸出3
    System.out.println(Collections.binarySearch(nums, 3));
  }
}

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

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

復(fù)制

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

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

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

其中,dest 表示目標(biāo)集合對(duì)象,src 表示源集合對(duì)象。

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

例 5

在一個(gè)集合中保存了 5 個(gè)商品名稱,現(xiàn)在要使用 Collections 類中的 copy() 方法將其中的 3 個(gè)替換掉。具體實(shí)現(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) + " 個(gè)商品:");
      String name = input.next();
      srcList.add(name);
    }
    // 調(diào)用copy()方法將當(dāng)前商品信息復(fù)制到原有商品信息集合中
    Collections.copy(destList, srcList);
    System.out.println("當(dāng)前商品有:");
    for (int i = 0; i < destList.size(); i++) {
      System.out.print(destList.get(i) + "\t");
    }
  }
}

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

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

到此這篇關(guān)于Java Collections類操作集合詳解的文章就介紹到這了,更多相關(guān)Java Collections操作集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java線程之死鎖

    java線程之死鎖

    這篇文章主要介紹了Java線程之死鎖,死鎖是這樣一種情形-多個(gè)線程同時(shí)被阻塞,它們中的一個(gè)或者全部都在等待某個(gè)資源被釋放。由于線程被無(wú)限期地阻塞,因此程序不可能正常終止
    2022-05-05
  • SpringBoot統(tǒng)一數(shù)據(jù)返回的幾種方式

    SpringBoot統(tǒng)一數(shù)據(jù)返回的幾種方式

    在Web應(yīng)用程序開發(fā)中,統(tǒng)一數(shù)據(jù)返回格式對(duì)于前后端分離項(xiàng)目尤為重要,本文就來(lái)介紹一下SpringBoot統(tǒng)一數(shù)據(jù)返回的幾種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • SpringBoot應(yīng)用線上重啟腳本的命令詳解

    SpringBoot應(yīng)用線上重啟腳本的命令詳解

    這篇文章主要介紹了SpringBoot應(yīng)用線上重啟腳本,通過(guò)查找應(yīng)用進(jìn)程PID,殺死應(yīng)用進(jìn)程PID,運(yùn)行啟動(dòng)腳本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Spring事務(wù)管理零基礎(chǔ)入門

    Spring事務(wù)管理零基礎(chǔ)入門

    事務(wù)的作用就是為了保證用戶的每一個(gè)操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就?回退到事務(wù)開始未進(jìn)行操作的狀態(tài)。事務(wù)管理是Spring框架中最為常用的功能之一,我們?cè)谑褂肧pring?Boot開發(fā)應(yīng)用時(shí),大部分情況下也都需要使用事務(wù)
    2022-10-10
  • 詳解Java項(xiàng)目中讀取properties文件

    詳解Java項(xiàng)目中讀取properties文件

    本篇文章主要介紹了Java項(xiàng)目中讀取properties文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • 在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲(chǔ)

    在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲(chǔ)

    本文主要介紹了在SpringBoot中如惡化使用MongoDB完成數(shù)據(jù)存儲(chǔ),接下來(lái)這篇我們將圍繞MongoDB進(jìn)行,MongoDB是一個(gè)開源的,面向文檔的NoSQL數(shù)據(jù)庫(kù)管理系統(tǒng),使用類似JSON的BSON(二進(jìn)制JSON)格式來(lái)存儲(chǔ)數(shù)據(jù),具有靈活的數(shù)據(jù)模型和強(qiáng)大的查詢功能,需要的朋友可以參考下
    2023-11-11
  • java中建立0-10m的消息(字符串)實(shí)現(xiàn)方法

    java中建立0-10m的消息(字符串)實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇java中建立0-10m的消息(字符串)實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java異步調(diào)用轉(zhuǎn)同步的方法

    Java異步調(diào)用轉(zhuǎn)同步的方法

    這篇文章主要介紹了Java異步調(diào)用轉(zhuǎn)同步的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • Spring編程式和聲明式事務(wù)實(shí)例講解小結(jié)

    Spring編程式和聲明式事務(wù)實(shí)例講解小結(jié)

    這篇文章主要介紹了Spring編程式和聲明式事務(wù)實(shí)例講解小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 面向切面的Spring通過(guò)切點(diǎn)來(lái)選擇連接點(diǎn)實(shí)例詳解

    面向切面的Spring通過(guò)切點(diǎn)來(lái)選擇連接點(diǎn)實(shí)例詳解

    這篇文章主要為大家介紹了面向切面的Spring通過(guò)切點(diǎn)來(lái)選擇連接點(diǎn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評(píng)論

上林县| 名山县| 台安县| 舞阳县| 武平县| 长泰县| 南京市| 黎城县| 宣汉县| 台州市| 白城市| 岗巴县| 枣强县| 新乡县| 洮南市| 丽江市| 白水县| 年辖:市辖区| 常宁市| 永靖县| 正蓝旗| 汤原县| 抚远县| 迁安市| 平阳县| 泰来县| 金秀| 浙江省| 锡林郭勒盟| 桂阳县| 临武县| 通江县| 老河口市| 柯坪县| 青神县| 桑植县| 和林格尔县| 健康| 内江市| 泗阳县| 韶山市|