日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java Collections類操作集合詳解

瀏覽:52日期:2022-08-18 08:45:32

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 中沒(méi)有出現(xiàn)這樣的子 List,則返回 -1。 int lastIndexOfSubList(List source, List target):返回子 List 對(duì)象在父 List 對(duì)象中最后一次出現(xiàn)的位置索引;如果父 List 中沒(méi)有?縵終庋?淖 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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产先锋| 黄色aa久久| 妖精视频成人观看www| 午夜欧美在线| 蜜臀久久99精品久久久久久9| 亚洲精品中文字幕乱码| 视频在线观看国产精品| 日韩精品成人| 国产一区二区三区四区| 亚洲午夜一级| 国产精品日韩| 日韩精品五月天| 精品久久久久中文字幕小说| 久久精品亚洲人成影院| 久久福利精品| 国产精品一区二区av交换| 伊人久久av| 亚洲香蕉视频| 97精品国产一区二区三区| aa亚洲婷婷| 欧美日韩亚洲三区| 少妇精品导航| 国产伦精品一区二区三区视频| 久久亚洲精品中文字幕| 99riav1国产精品视频| 国产精品传媒麻豆hd| 欧美+亚洲+精品+三区| 国产伦精品一区二区三区千人斩 | 你懂的亚洲视频| 中文av在线全新| 免费观看久久av| zzzwww在线看片免费| 日韩精品一二三区| 亚洲成人不卡| 国产精品男女| 中文字幕亚洲影视| 99国产精品久久久久久久| 色婷婷亚洲mv天堂mv在影片| 日韩高清不卡一区| 亚洲少妇在线| 激情五月色综合国产精品| 久久精品国产福利| 久久狠狠久久| 欧美自拍一区| 日本精品另类| 亚洲精品人人| 精品久久97| 国产情侣久久| 日韩欧美中文字幕一区二区三区| 亚洲综合日韩| 热久久免费视频| 蜜桃一区二区三区在线观看| 91精品1区| 狠狠久久婷婷| 国产精品人人爽人人做我的可爱| 久久久久国产精品一区二区| 国产精品黑丝在线播放| 精品国产a一区二区三区v免费| 欧美1区二区| 丰满少妇一区| 精品午夜视频| 久久xxx视频| 风间由美中文字幕在线看视频国产欧美| 欧美国产极品| 中文在线资源| 午夜欧美巨大性欧美巨大| 日韩国产欧美视频| 久久精品伊人| 欧美成人高清| 在线精品一区| 免费在线欧美黄色| 久久天堂av| 国产一区二区精品| 欧美伊人久久| av高清不卡| 久久婷婷久久| 免费观看久久久4p| 久久久精品国产**网站| 婷婷综合社区| 日本91福利区| 伊人久久av| 国产欧美一区二区三区国产幕精品| 日韩av二区| 老牛影视一区二区三区| 国产精品白丝一区二区三区| 久久婷婷av| 久久国产三级| 亚洲精品一二三区区别| 国产精品巨作av| 国产精品腿扒开做爽爽爽挤奶网站| 日韩高清不卡一区二区| 亚洲免费黄色| 日韩和欧美一区二区| 日韩1区2区日韩1区2区| 欧美日韩尤物久久| 欧美中文一区二区| 午夜国产欧美理论在线播放| 国产suv精品一区二区四区视频 | 丝袜美腿诱惑一区二区三区| 日本亚洲欧美天堂免费| 亚洲高清成人| 久久精品国产久精国产| 日日夜夜免费精品视频| 久久久久.com| 国产精品成久久久久| 欧美国产极品| 日本不卡视频一二三区| 亚洲一区二区三区免费在线观看| 中文字幕成在线观看| 国产调教一区二区三区| 综合欧美精品| 久久国产精品亚洲77777| 欧美性感美女一区二区| 91一区二区三区四区| 麻豆精品国产91久久久久久| 美女视频黄免费的久久| 国产日韩欧美三区| 国产乱子精品一区二区在线观看| 日韩中文字幕av电影| 影音先锋久久| 美美哒免费高清在线观看视频一区二区| 在线日韩一区| 亚洲免费激情| 午夜天堂精品久久久久| 日韩精品免费视频一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲综合小说| 免费亚洲婷婷| 久久久久国产一区二区| 国产亚洲福利| 欧美亚洲人成在线| 美女精品一区二区| 亚洲v在线看| 一区二区三区视频免费观看| 在线一区视频观看| 国产91久久精品一区二区| 欧美1区免费| 亚洲毛片网站| 精品久久亚洲| 国户精品久久久久久久久久久不卡 | 婷婷激情图片久久| 亚洲精品少妇| 精品黄色一级片| 欧美日韩四区| 久久不卡国产精品一区二区| 日韩激情一二三区| 国产成人久久精品一区二区三区| 日韩欧美一区二区三区免费观看| av亚洲免费| 国产精久久一区二区| 999久久久91| 日韩欧美在线精品| 欧美日韩一二三四| 亚洲精品高潮| 欧美日韩在线网站| 精品一区二区三区四区五区| 亚洲精选成人| 久久高清一区| 亚洲在线一区| 国产视频一区免费看| 欧美少妇精品| 午夜精品成人av| 91视频一区| 国产精品蜜芽在线观看| 精品视频高潮| 国产一区二区三区不卡视频网站| 欧美黄色一区二区| 精品入口麻豆88视频| 国产a亚洲精品| av资源中文在线天堂| 午夜av不卡| 国产日韩专区| 婷婷综合电影| 日韩动漫一区| 日韩一级精品| 伊人久久视频| 日韩av一级片| 日韩高清成人在线| 综合国产视频| 蜜桃av一区二区在线观看| 天堂日韩电影| 欧洲亚洲一区二区三区| 国产精品久久久久久久久久妞妞| 日韩精品一页| 欧美在线91| 日韩高清中文字幕一区二区| 视频在线观看国产精品| 日本视频中文字幕一区二区三区| 中文日韩欧美| 亚洲毛片在线免费| 7777精品| 欧美激情日韩| 偷拍精品精品一区二区三区| 国产精品外国| 日本少妇精品亚洲第一区| 精品国产一区二区三区av片| 涩涩av在线| 欧美不卡在线| 亚洲精品福利| 在线中文字幕播放|