Java11中Collections类的使用小结

 更新时间:2025年08月21日 08:21:45   作者:有梦想的攻城狮  
Java的Collections工具类提供静态方法简化集合操作,包括排序、搜索、反转等算法封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、核心作用与定义

Collections类是Java集合框架的核心工具类,位于java.util包中,提供了一系列静态方法用于操作List、Set、Map等集合。其核心作用包括:

  • 简化集合操作:如排序、搜索、反转、填充等。
  • 线程安全支持:通过同步包装器(如synchronizedList)实现线程安全。
  • 不可变集合创建:提供方法生成不可修改的集合视图。
  • 算法复用:封装常见集合操作算法,避免重复实现。

二、常用方法详解

1.排序相关

  • sort(List<T> list)
    按自然顺序升序排序列表,要求元素实现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.反转与随机打乱

  • reverse(List<?> list)
    反转列表元素顺序。

    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)
    统计元素出现次数。

    List<String> items = Arrays.asList("apple", "banana", "apple");
    int count = Collections.frequency(items, "apple"); // 输出2
    
  • rotate(List<?>, int distance)
    循环移动元素(正数右移,负数左移)。

    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()
    快速创建不可变集合,支持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<?>)
    查找子列表首次出现的位置。
    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,优化低延迟场景,支持并发压缩和动态堆调整。
  • Java 8:默认使用Parallel GC,强调高吞吐量。

2.集合API扩展

  • Java 11新增集合工厂方法(如List.of()),简化不可变集合创建。
  • Java 8需通过Collections.unmodifiableList手动包装。

3.语言特性影响

  • Java 11支持局部变量类型推断(var),但Collections方法参数仍需显式类型。
    var list = List.of("a", "b"); // 有效
    Collections.sort(var list); // 无效,需显式类型
    

五、最佳实践建议

  1. 线程安全
    使用同步包装器保护非线程安全集合:

    List<String> syncList = Collections.synchronizedList(new ArrayList<>());
    
  2. 不可变集合
    优先使用List.of()Collections.unmodifiableList避免意外修改,提升代码安全性。

  3. 性能优化

    • 对大列表使用G1 GC,调整堆参数(如-XX:G1HeapRegionSize)。
    • 避免在频繁修改的集合上使用不可变视图。
  4. 算法选择
    根据场景选择合适方法:

    • 自然顺序排序用sort(List),自定义排序用sort(List, Comparator)
    • 查找极值时,优先使用min()/max()而非遍历。

六、总结

Java 11的Collections类在保持核心功能稳定的同时,通过新增工厂方法和增强现有方法,提升了开发效率和代码简洁性。用户应结合具体场景选择合适方法,并注意版本差异对代码的影响,尤其是垃圾收集器和集合API的变化。

到此这篇关于Java11中Collections类的使用小结的文章就介绍到这了,更多相关Java11 Collections类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis通用Mapper和PageHelper的过程详解

    MyBatis通用Mapper和PageHelper的过程详解

    这篇文章主要介绍了MyBatis通用Mapper和PageHelper的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • java  实现输出随机图片实例代码

    java 实现输出随机图片实例代码

    这篇文章主要介绍了java 实现输出随机图片实例代码的相关资料,需要的朋友可以参考下
    2017-06-06
  • Java让泛型实例化的方法

    Java让泛型实例化的方法

    这篇文章主要介绍了Java让泛型实例化的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • SpringAop源码及调用过程概述

    SpringAop源码及调用过程概述

    这篇文章主要介绍了SpringAop源码及调用过程概述,Spring AOP(面向切面编程)是Spring框架的一个重要特性,它提供了一种在程序运行期间动态地将额外的行为织入到代码中的方式,需要的朋友可以参考下
    2023-10-10
  • 实例解析JAVA中代码的加载顺序

    实例解析JAVA中代码的加载顺序

    这篇文章主要介绍了举例说明Java中代码块的执行顺序,需要的朋友可以参考下
    2017-04-04
  • SpringBoot Jackson日期格式化统一配置的实现

    SpringBoot Jackson日期格式化统一配置的实现

    Spring项目中经常需要配置日期时间格式格式,本文主要介绍了SpringBoot Jackson日期格式化统一配置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • SpringBoot中@ComponentScan的使用详解

    SpringBoot中@ComponentScan的使用详解

    这篇文章主要介绍了SpringBoot中@ComponentScan的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot+Vue3整合SSE实现实时消息推送

    SpringBoot+Vue3整合SSE实现实时消息推送

    这篇文章主要为大家详细介绍了SpringBoot+Vue3整合SSE实现实时消息推送的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-03-03
  • 详解Mybatis核心配置文件

    详解Mybatis核心配置文件

    今天给大家带来的是关于Java的相关知识,文章围绕着Mybatis核心配置文件展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Spring @Cacheable注解类内部调用失效的解决方案

    Spring @Cacheable注解类内部调用失效的解决方案

    这篇文章主要介绍了Spring @Cacheable注解类内部调用失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论