摘要:提供了一個操作和等集合的工具類,該工具類提供了大量方法對集合進行排序查詢和修改等操作,還提供了將集合對象置為不可變對集合對象實現(xiàn)同步控制等方法排序操作反轉(zhuǎn)指定集合中元素的順序?qū)显剡M行隨機排序方法模擬了洗牌動作根據(jù)元素的自然順序?qū)χ付?/p>
Java提供了一個操作Set、List和Map等集合的工具類:Collections,該工具類提供了大量方法對集合進行排序、查詢和修改等操作,還提供了將集合對象置為不可變、對集合對象實現(xiàn)同步控制等方法
排序操作void reverse(List list):反轉(zhuǎn)指定List集合中元素的順序
void shuffle(List list):對List集合元素進行隨機排序(shuffle方法模擬了“洗牌”動作)
void sort(List list):根據(jù)元素的自然順序?qū)χ付↙ist集合的元素按升序進行排序
void sort(List list, Comparator c):根據(jù)指定Comparator比較器產(chǎn)生的順序?qū)ist集合元素進行排序
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個元素“整體”移到后邊。該方法不會改變集合的長度
public class SortTest { 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] Collections.reverse(nums); // 將List集合元素的次序反轉(zhuǎn) System.out.println(nums); // 輸出:[0, 3, -5, 2] Collections.sort(nums); // 將List集合元素的按自然順序排序 System.out.println(nums); // 輸出:[-5, 0, 2, 3] Collections.shuffle(nums); // 將List集合元素的按隨機順序排序 System.out.println(nums); // 每次輸出的次序不固定 } }查找、替換操作
int binarySearch(List list, Object key):使用二分搜索法搜索指定列表,以獲得指定對象在List集合中的索引。
此前必須保證List集合中的元素已經(jīng)處于有序狀態(tài)
Object max(Collection coll):根據(jù)元素的自然順序,返回給定collection中的最大元素
Object max(Collection coll, Comparator comp):根據(jù)指定Comparator比較器產(chǎn)生的順序,返回給定collection中的最大元素
Object min(Collection coll):根據(jù)元素的自然順序,返回給定collection中的最小元素
Object min(Collection coll, Comparator comp):根據(jù)指定Comparator比較器產(chǎn)生的順序,返回給定 collection中的最小元素
void fill(List list, Object obj):使用指定元素obj替換指定List集合中的所有元素
int frequency(Collection c, Object o):返回指定collection中指定元素的出現(xiàn)次數(shù)
int indexOfSubList(List source, List target):返回子List對象在父List對象中第一次出現(xiàn)的位置索引;如果沒有出現(xiàn)這樣的列表,則返回-1
int lastIndexOfSubList(List source, List target):返回子List對象在父List對象中最后一次出現(xiàn)的位置索引;如果沒有出現(xiàn)這樣的列表,則返回-1
boolean replaceAll(List list, Object oldVal, Object newVal):使用一個新值newVal替換List對象的所有舊值oldVal
public class SearchTest { public static void main(String[] args) { ArrayList nums = new ArrayList(); nums.add(23); nums.add(0); nums.add(9); nums.add(3); System.out.println(nums); // 輸出:[23, 0, 9, 3] System.out.println(Collections.max(nums)); // 輸出最大元素,將輸出23 System.out.println(Collections.min(nums)); // 輸出最小元素,將輸出0 Collections.replaceAll(nums , 0 , 1); // 將nums中的0使用1來代替 System.out.println(nums); // 輸出:[23, 1, 9, 3] // 判斷-5在List集合中出現(xiàn)的次數(shù),返回1 System.out.println(Collections.frequency(nums , 23)); Collections.sort(nums); // 對nums集合排序 System.out.println(nums); // 輸出:[1, 3, 9, 23] //只有排序后的List集合才可用二分法查詢,輸出3 System.out.println(Collections.binarySearch(nums , 23)); } }同步控制
Collectons提供了多個synchronizedXxx()方法,該方法可以將指定集合包裝成線程同步的集合,從而解決多線程并發(fā)訪問集合時的線程安全問題
Java常用的集合框架中的實現(xiàn)類HashSet、TreeSet、ArrayList、LinkedList、HashMap、TreeMap都是線程不安全的。Collections提供了多個靜態(tài)方法可以把他們包裝成線程同步的集合
Collection synchronizedCollection(Collection c):返回指定collection支持的同步(線程安全的)collection
List synchronizedList(List list):返回指定List支持的同步(線程安全的)List
Map synchronizedMap(Map m):返回由指定Map支持的同步(線程安全的)Map
Set synchronizedSet(Set s):返回指定Set支持的同步(線程安全的)Set
public class SynchronizedTest { public static void main(String[] args) { // 下面程序創(chuàng)建了四個線程安全的集合對象 Collection c = Collections .synchronizedCollection(new ArrayList()); List list = Collections.synchronizedList(new ArrayList()); Set s = Collections.synchronizedSet(new HashSet()); Map m = Collections.synchronizedMap(new HashMap()); } }設(shè)置不可變集合
Collections提供了如下三個方法來返回一個不可變集合:
emptyXxx():返回一個空的、不可變的集合對象,此處的集合既可以是List、SortedSet、Set、SortedMap、Map
singletonXxx():返回一個只包含指定對象(只有一個或一個元素)的、不可變的集合對象,此處的集合可以是List和Map
unmodifiableXxx():返回指定集合對象的不可變視圖,此處的集合可以是:List、SortedSet、Set、SortedMap、Map
通過上面Collections提供的三類方法,可以生成“只讀”的Collection或Map
public class UnmodifiableTest { public static void main(String[] args) { // 創(chuàng)建一個空的、不可改變的List對象 List unmodifiableList = Collections.emptyList(); // 創(chuàng)建一個只有一個元素,且不可改變的Set對象 Set unmodifiableSet = Collections.singleton("MVP"); // 創(chuàng)建一個普通Map對象 Map player = new HashMap(); player.put("勒布朗詹姆斯", 23); player.put("克萊湯普森", 11); // 返回普通Map對象對應的不可變版本 Map unmodifiableMap = Collections.unmodifiableMap(player); // 下面任意一行代碼都將引發(fā)UnsupportedOperationException異常 unmodifiableList.add("德懷恩韋德"); //① unmodifiableSet.add("克里斯波什"); //② unmodifiableMap.put("語伊戈達拉", 9); //③ } }
不可變的集合對象只能訪問集合元素,不可修改集合元素,上述①、②、③處代碼都將引發(fā)UnsupportedOperationException異常
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66420.html
摘要:排序操作均為方法反轉(zhuǎn)中元素的順序。根據(jù)元素的自然順序?qū)χ付显匕瓷蚺判?,根?jù)指定的產(chǎn)生的順序?qū)显剡M行排序。,,將指定集合中的處元素和處元素進行交換。 C...
摘要:正文工具類是包中的一個工具類,主要功能是對集合及其元素進行操作。這篇文章算是對官方文檔的總結(jié)和歸納,也加以自己的思考,也是面試題之一,希望自己能在之后不會再吃這道題的虧。 ????本文首發(fā)于cartoon的博客????轉(zhuǎn)載請注明出處:https://cartoonyu.github.io/c...????推薦一篇不錯的博文https://gitee.com/SnailClimb/Jav...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見的多線程設(shè)計模式,設(shè)計了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...
摘要:是集合工具類,用來對集合進行操作。往集合中添加多個元素往集合中添加一些元素。打亂順序打亂集合順序。 package com.itheima.demo05.Collections; import java.util.ArrayList;import java.util.Collections; /* - java.utils.Collections是集合工具類,用來對集合進行操作。部分方...
摘要:是集合工具類,用來對集合進行操作。部分方法如下將集合中元素按照默認規(guī)則排序。注意使用前提被排序的集合里邊存儲的元素必須實現(xiàn)重寫接口中的方法定義排序的規(guī)則接口的排序規(guī)則自己參數(shù)升序?qū)⒓现性匕凑漳J規(guī)則排序。 package com.itheima.demo05.Collections; import java.util.ArrayList;import java.util.Colle...
閱讀 3758·2021-08-11 11:16
閱讀 1629·2019-08-30 15:44
閱讀 1998·2019-08-29 18:45
閱讀 2278·2019-08-26 18:18
閱讀 1009·2019-08-26 13:37
閱讀 1576·2019-08-26 11:43
閱讀 2124·2019-08-26 11:34
閱讀 380·2019-08-26 10:59