国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java集合框架之Collections工具類

2019-11-06 07:29:11
字體:
供稿:網(wǎng)友

java提供了一個操作SetListMap等集合的工具類:Collections,該工具提供了大量方法對集合元素進(jìn)行排序、查詢和修改等操作,還提供了將集合對象設(shè)置為不可變、對集合對象實(shí)現(xiàn)同步控制等方法。

1.Collections之排序操作

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

方法 說明
void reverse(List list) 反轉(zhuǎn)指定列表中元素的順序
void shuffle(List list) 對List集合元素進(jìn)行隨機(jī)排序
void sort(List list) 根據(jù)元素的自然順序?qū)χ付↙ist集合的元素按升序進(jìn)行排序
void sort(List list,Comparator c) 根據(jù)指定Comparator產(chǎn)生的順序?qū)ist集合元素進(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ù)時,將list集合的后distance個元素“整體”移到前面;當(dāng)distance為負(fù)數(shù)時,將list集合的前distance個元素“整體”移到后面;該方法不會改變集合的長度

我們可以對CollectionsList的排序操作做如下測試:

public class SortTest { public static void main(String[] args) { ArrayList<Integer> nums = new ArrayList<>(); nums.add(3); nums.add(-9); nums.add(0); nums.add(6); // 原始list,輸出[3, -9, 0, 6] System.out.PRintln(nums); // 將nums反轉(zhuǎn),輸出[6, 0, -9, 3] Collections.reverse(nums); System.out.println(nums); // 將nums集合按自然順序排序,輸出[-9, 0, 3, 6] Collections.sort(nums); System.out.println(nums); // 將nums隨機(jī)打亂 Collections.shuffle(nums); System.out.println(nums); // 將nums集合按降序排列,輸出[6, 3, 0, -9] Collections.sort(nums, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); System.out.println(nums); // 將nums集合的最后兩個元素移到最前面,輸出[0, -9, 6, 3] Collections.rotate(nums, 2); System.out.println(nums); // 將nums集合的第一個元素移到最后面,輸出[-9, 6, 3, 0] Collections.rotate(nums, -1); System.out.println(nums); }}

2.Collections之查找、替換操作

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 coll,Object obj) 返回指定集合中指定元素的出現(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

同樣,我們做如下測試:

public class SearchTest { public static void main(String[] args) { ArrayList<Integer> nums = new ArrayList<>(); nums.add(3); nums.add(-9); nums.add(0); nums.add(6); // 原始序列,輸出[3, -9, 0, 6] System.out.println(nums); // 輸出nums中的最大元素,6 System.out.println(Collections.max(nums)); // 輸出nums中的最小元素,-9 System.out.println(Collections.min(nums)); // 將nums中的0替換成1,輸出[3, -9, 1, 6] Collections.replaceAll(nums, 0, 1); System.out.println(nums); // 判斷nums中1出現(xiàn)的次數(shù),輸出1 System.out.println(Collections.frequency(nums,1)); // 將nums排序,然后進(jìn)行二分搜索,搜索數(shù)字3的位置索引 Collections.sort(nums); System.out.println(Collections.binarySearch(nums, 3)); }}

3.Collections之同步控制

Collections類中提供了多個synchronizedXxx()方法,該方法可以將指定集合包裝成線程同步的集合,從而可以解決多線程并發(fā)訪問集合時的線程安全問題。

Java中常用的集合框架中的實(shí)現(xiàn)類HashSetTreeSetArrayListArrayDequeLinkedListHashMapTreeMap都是線程不安全的。如果有多個線程訪問它們,而且有超過一個的線程試圖修改它們,則存在線程安全的問題。Collections提供了多個類方法可以把它們包裝成線程同步的集合。

public class SynchronizedTest { public static void main(String[] args) { Collection c = Collections.synchronizedCollection(new ArrayList<>()); List list = Collections.synchronizedList(new ArrayList<>()); Set s = Collections.synchronizedSet(new HashSet<>()); Map m = Collections.synchronizedMap(new HashMap<>()); }}

上面的例子中,直接將新創(chuàng)建的集合對象傳給了CollectionssynchronizedXxx()方法,這樣就可以直接獲取ListSetMap的線程安全的實(shí)現(xiàn)版本。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽中县| 仁寿县| 栖霞市| 桂林市| 吴忠市| 灵山县| 锡林郭勒盟| 青州市| 焉耆| 皮山县| 墨脱县| 昭苏县| 六枝特区| 湟中县| 肇州县| 克山县| 三江| 夹江县| 卫辉市| 木里| 桦川县| 桃江县| 精河县| 顺平县| 卢氏县| 花莲市| 炎陵县| 错那县| 宝兴县| 乐都县| 察隅县| 曲松县| 冷水江市| 扎囊县| 乌兰察布市| 周口市| 施秉县| 辽宁省| 松原市| 黄梅县| 眉山市|