日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.8 Collections类操作集合详解——排序,查找,复制

發(fā)布時(shí)間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.8 Collections类操作集合详解——排序,查找,复制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Collections類操作集合詳解

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

排序(正向和逆向):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ì)改變集合的長度。

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

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

import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner;public class Test {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);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à)格: 56 請(qǐng)輸入第2個(gè)商品的價(jià)格: 12 請(qǐng)輸入第3個(gè)商品的價(jià)格: 33 請(qǐng)輸入第4個(gè)商品的價(jià)格: 86 請(qǐng)輸入第5個(gè)商品的價(jià)格: 32 價(jià)格從低到高的排列為: 12 32 33 56 86

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

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

public class Test {public static void main(String[] args) {Scanner input=new Scanner(System.in);List goods=new ArrayList();System.out.println("===============商品信息==============");for(int i=0;i<5;i++){System.out.println("請(qǐng)輸入"+(i+1)+"個(gè)商品的名稱");String name=input.next();goods.add(name);//將錄入的商品名稱存到List集合中}Collections.reverse(goods);// 調(diào)用reverse()方法對(duì)集合元素進(jìn)行反轉(zhuǎn)排序System.out.println("按錄入時(shí)間的先后順序進(jìn)行降序排列為:");for(int i=0;i<5;i++){System.out.println(goods.get(i));}} }

如上述代碼,首先循環(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)代碼如下:

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

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

*********商品信息********* 請(qǐng)輸入第 1 個(gè)商品的名稱: 薯片 請(qǐng)輸入第 2 個(gè)商品的名稱: 可樂 請(qǐng)輸入第 3 個(gè)商品的名稱: 辣條 重置商品信息,將所有名稱都更改為“未填寫” 重置后的商品信息為: 未填寫 未填寫 未填寫

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

import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner;public class Test {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)); // 輸出最大元素,將輸出 3System.out.println(Collections.min(nums)); // 輸出最小元素,將輸出-5Collections.replaceAll(nums, 0, 1);// 將 nums中的 0 使用 1 來代替System.out.println(nums); // 輸出:[2, -5, 3, 1]// 判斷-5在List集合中出現(xiàn)的次數(shù),返回1System.out.println(Collections.frequency(nums, -5));Collections.sort(nums); // 對(duì) nums集合排序System.out.println(nums); // 輸出:[-5, 1, 2, 3]// 只有排序后的List集合才可用二分法查詢,輸出3System.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() 方法的語法格式如下:

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

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

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

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

import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner;public class Test {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.print(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)前商品有: 勞斯萊斯 凱迪拉克 蘭博基尼 火腿腸 冰紅茶

總結(jié)

以上是生活随笔為你收集整理的1.8 Collections类操作集合详解——排序,查找,复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。