溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

集合工具類Collections代碼詳解

發(fā)布時間:2020-06-23 02:49:04 來源:網(wǎng)絡(luò) 閱讀:446 作者:季沉Trace 欄目:編程語言

簡述

Collections:操作Set、List和Map等集合的工具類,主要包含對元素排序、查詢、修改、設(shè)置不可變和同步控制等方法


排序操作? ? ? ??

import?java.util.ArrayList;
import?java.util.Collections;

public?class?sortedTest?{
	public?static?void?main(String[]?args)?{
		ArrayList<Integer>?list?=?new?ArrayList<>();
		list.add(0);
		list.add(19);
		list.add(23);
		list.add(-2);
		System.out.println("正常輸出:"+list);
		//反轉(zhuǎn)指定list集合中元素的順序
		Collections.reverse(list);
		System.out.println("反轉(zhuǎn)輸出:"+list);
		//升序排序
		Collections.sort(list);
		System.out.println("升序輸出:"+list);
		//隨機排序,洗牌
		Collections.shuffle(list);
		System.out.println("隨機洗牌:"+list);
		//將i處元素和j處元素進行交換
		Collections.swap(list,?0,?3);
		System.out.println("交換輸出:"+list);
		//n為正數(shù),后n個元素移到前面,n為負數(shù),前n個元素移到后面
		Collections.rotate(list,?2);
		System.out.println("前移輸出:"+list);
		//比較器排序,降序
		Collections.sort(list,?(o1,o2)->{
			return?(Integer)o1>(Integer)o2?-1:(Integer)o1<(Integer)o2?1:0;
		});
		System.out.println("降序輸出:"+list);
	}
	
}

查找、替換

import?java.util.ArrayList;
import?java.util.Collections;

public?class?searchTest?{

	public?static?void?main(String[]?args)?{
		//?TODO?Auto-generated?method?stub
		ArrayList<Integer>?numbers?=?new?ArrayList<>();
		numbers.add(0);
		numbers.add(2);
		numbers.add(23);
		numbers.add(-9);
		numbers.add(2);
		numbers.add(2);
		System.out.println(numbers);
		//按元素的自然排序
		System.err.println("最大元素:"?+?Collections.max(numbers));
		System.err.println("最小元素:"?+?Collections.min(numbers));
		//集合中指定元素的出現(xiàn)次數(shù)
		System.out.println("2在numbers中出現(xiàn)的次數(shù):"?+?Collections.frequency(numbers,?2));
		//使用12替換numbers中的所有2
		Collections.replaceAll(numbers,?2,?12);
		System.out.println("使用12替換numbers中的所有2:?"+numbers);
		//numbers中的元素處于有序狀態(tài)才能使用二分查找法
		Collections.sort(numbers);
		System.out.println("排序:?"+numbers);
		System.out.println("23在numbers中的索引:?"+Collections.binarySearch(numbers,?23));
	}

}

同步控制

Collections類中提供了多個synchronizedXxx()方法,將指定集合包裝成線程同步的集合,從而解決多線程并發(fā)訪問集合時的線程安全問題
//線程安全的集合對象,直接將新創(chuàng)建的集合對象傳給Collections的synchronizedXxx()方法
????????
Collection?c?=?Collections.synchronizedCollection(new?ArrayList());
List?list?=?Collections.synchronizedList(new?arrayList());
Set?s?=?Collections.synchronizedSet(new?HashSet());
Map?m?=?Collections.synchronizedMap(new?HashMap());

與Vector類似,盡量少用Hashtable,即使需要創(chuàng)建線程安全的Map實現(xiàn)類,可通過Collections工具類把HashMap變成線程安全的
如何用Collections工具類把HashMap變成線程安全的?
Map?m?=?Collections.synchronizedMap(new?HashMap())

設(shè)置不可變集合

import?java.util.Collections;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;
import?java.util.Set;

/*設(shè)置不可變集合,只能訪問,不能修改
?*?Collections.emptyXxx():返回一個空的、不可變的集合,可為List、Map、SortedMap、Set、SortedSet
?*?singletonXxx():返回一個只包含指定對象的、不可變的集合,可為List、Map
?*?unmodifiableXxx():返回集合對象的不可變視圖,可為List、Map、SortedMap、Set、SortedSet
?*???程序可直接調(diào)用Set、List、Map的of()方法即可創(chuàng)建包含N個元素的不可變集合
?*?*/

public?class?unmodifiableCollections?{
	
	@SuppressWarnings({?"rawtypes",?"unchecked"?})
	public?static?void?main(String[]?args)?{
		//?TODO?Auto-generated?method?stub
		
		//返回一個空的、不可變的集合
		List?emptyList?=?Collections.EMPTY_LIST;
		
		//返回一個只包含指定對象的、不可變的集合
		Set?singletonSet?=?Collections.singleton("你好");
		
		//普通Map集合
		Map?scores?=?new?HashMap();
		scores.put("語文",?87);
		scores.put("數(shù)學(xué)",?97);
		//返回集合對象的不可變視圖
		Map?unmodifiableMap?=?Collections.unmodifiableMap(scores);
		
		//創(chuàng)建包含三個元素的Set集合
		Set?set?=?Set.of("Python","Java","Qt");
		
		//創(chuàng)建包含4個元素的List
		List?list?=?List.of(1,2,3,4);
		
		//創(chuàng)建包含三個key-value對的Map集合
		Map?map?=?Map.of("語文",98,"數(shù)學(xué)",97,"英語",90);
		Map?map1?=?Map.ofEntries(Map.entry("語文",?98),Map.entry("數(shù)學(xué)",?97),Map.entry("英語",?97));
		
		System.out.println(emptyList);			//[]
		System.out.println(unmodifiableMap);	//{數(shù)學(xué)=97,?語文=87}
		System.out.println(singletonSet);		//[你好]
		
		System.out.println(list);				//[1,?2,?3,?4]
		System.out.println(set);				//[Python,?Java,?Qt]
		System.out.println(map);				//{英語=90,?數(shù)學(xué)=97,?語文=98}
		System.out.println(map1);?				//{數(shù)學(xué)=97,?英語=97,?語文=98}
	}
}


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI