Java11中Collections類的使用小結(jié)
一、核心作用與定義
Collections
類是Java集合框架的核心工具類,位于java.util
包中,提供了一系列靜態(tài)方法用于操作List、Set、Map等集合。其核心作用包括:
- 簡化集合操作:如排序、搜索、反轉(zhuǎn)、填充等。
- 線程安全支持:通過同步包裝器(如
synchronizedList
)實現(xiàn)線程安全。 - 不可變集合創(chuàng)建:提供方法生成不可修改的集合視圖。
- 算法復用:封裝常見集合操作算法,避免重復實現(xiàn)。
二、常用方法詳解
1.排序相關(guān)
sort(List<T> list)
按自然順序升序排序列表,要求元素實現(xiàn)Comparable
接口。List<Integer> numbers = Arrays.asList(4, 2, 5, 1, 3); Collections.sort(numbers); // 輸出 [1, 2, 3, 4, 5]
sort(List<T> list, Comparator<? super T> c)
按指定比較器排序,支持自定義排序邏輯。Comparator<Integer> descComparator = (a, b) -> b - a; Collections.sort(numbers, descComparator); // 降序排序
2.反轉(zhuǎn)與隨機打亂
reverse(List<?> list)
反轉(zhuǎn)列表元素順序。List<String> fruits = Arrays.asList("apple", "banana", "cherry"); Collections.reverse(fruits); // 輸出 [cherry, banana, apple]
shuffle(List<?> list)
隨機打亂列表元素(默認使用隨機源)。Collections.shuffle(fruits); // 輸出順序隨機,如 [banana, apple, cherry]
3.搜索與替換
binarySearch(List<?> list, T key)
二分搜索,要求列表已排序。Collections.sort(numbers); int index = Collections.binarySearch(numbers, 4); // 返回索引3
replaceAll(List<T> list, T oldVal, T newVal)
替換所有舊值為新值。List<String> words = Arrays.asList("hello", "world", "java"); Collections.replaceAll(words, "java", "javafx"); // 輸出 [hello, world, javafx]
4.極值查找
min(Collection<? extends T> coll)
返回集合最小元素。List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9); int min = Collections.min(numbers); // 輸出1
max(Collection<? extends T> coll)
返回集合最大元素。int max = Collections.max(numbers); // 輸出9
5.集合修改
fill(List<? super T> list, T obj)
用指定元素填充列表。List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c")); Collections.fill(list, "x"); // 輸出 [x, x, x]
copy(List<? super T> dest, List<? extends T> src)
復制源列表到目標列表(目標需足夠長)。List<String> src = Arrays.asList("sun", "moon", "star"); List<String> dest = new ArrayList<>(Arrays.asList("", "", "")); Collections.copy(dest, src); // 輸出 [sun, moon, star]
6.不可變集合
- unmodifiableList(List<? extends T> list)
返回不可修改的列表視圖,修改會拋出UnsupportedOperationException
。List<String> original = new ArrayList<>(Arrays.asList("one", "two")); List<String> unmodifiable = Collections.unmodifiableList(original); // unmodifiable.add("three"); // 拋出異常
7.其他實用方法
frequency(Collection<?> c, Object o)
統(tǒng)計元素出現(xiàn)次數(shù)。List<String> items = Arrays.asList("apple", "banana", "apple"); int count = Collections.frequency(items, "apple"); // 輸出2
rotate(List<?>, int distance)
循環(huán)移動元素(正數(shù)右移,負數(shù)左移)。List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Collections.rotate(list, 2); // 輸出 [4, 5, 1, 2, 3]
三、Java 11新增特性
1.集合工廠方法
List.of()、Set.of()、Map.of()
快速創(chuàng)建不可變集合,支持1-10個元素的顯式聲明。List<String> list = List.of("Alice", "Bob", "Charlie"); // Java 11新增 Set<Integer> set = Set.of(1, 2, 3); Map<String, Integer> map = Map.of("Alice", 25, "Bob", 30);
copyOf()
復制集合為不可變形式,適用于已有集合。List<String> original = new ArrayList<>(Arrays.asList("a", "b")); List<String> copied = List.copyOf(original); // 返回不可變列表
2.方法增強
- indexOfSubList(List<?>, List<?>)
查找子列表首次出現(xiàn)的位置。List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); List<Integer> subList = Arrays.asList(3, 4); int index = Collections.indexOfSubList(list, subList); // 返回2
四、與Java 8的差異
1.默認垃圾收集器變更
- Java 11:默認使用G1 GC,優(yōu)化低延遲場景,支持并發(fā)壓縮和動態(tài)堆調(diào)整。
- Java 8:默認使用Parallel GC,強調(diào)高吞吐量。
2.集合API擴展
- Java 11新增集合工廠方法(如
List.of()
),簡化不可變集合創(chuàng)建。 - Java 8需通過
Collections.unmodifiableList
手動包裝。
3.語言特性影響
- Java 11支持局部變量類型推斷(
var
),但Collections
方法參數(shù)仍需顯式類型。var list = List.of("a", "b"); // 有效 Collections.sort(var list); // 無效,需顯式類型
五、最佳實踐建議
線程安全
使用同步包裝器保護非線程安全集合:List<String> syncList = Collections.synchronizedList(new ArrayList<>());
不可變集合
優(yōu)先使用List.of()
或Collections.unmodifiableList
避免意外修改,提升代碼安全性。性能優(yōu)化
- 對大列表使用G1 GC,調(diào)整堆參數(shù)(如
-XX:G1HeapRegionSize
)。 - 避免在頻繁修改的集合上使用不可變視圖。
- 對大列表使用G1 GC,調(diào)整堆參數(shù)(如
算法選擇
根據(jù)場景選擇合適方法:- 自然順序排序用
sort(List)
,自定義排序用sort(List, Comparator)
。 - 查找極值時,優(yōu)先使用
min()
/max()
而非遍歷。
- 自然順序排序用
六、總結(jié)
Java 11的Collections
類在保持核心功能穩(wěn)定的同時,通過新增工廠方法和增強現(xiàn)有方法,提升了開發(fā)效率和代碼簡潔性。用戶應結(jié)合具體場景選擇合適方法,并注意版本差異對代碼的影響,尤其是垃圾收集器和集合API的變化。
到此這篇關(guān)于Java11中Collections類的使用小結(jié)的文章就介紹到這了,更多相關(guān)Java11 Collections類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot項目@RestController使用重定向redirect方式
這篇文章主要介紹了Spring Boot項目@RestController使用重定向redirect方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09springboot項目配置多數(shù)據(jù)庫連接的示例詳解
這篇文章主要介紹了springboot項目配置多數(shù)據(jù)庫連接的示例,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12Java classloader和namespace詳細介紹
這篇文章主要介紹了Java classloader和namespace詳細介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03Java自定義類數(shù)組報null的相關(guān)問題及解決
這篇文章主要介紹了Java自定義類數(shù)組報null的相關(guān)問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09