开发者

Java11中Collections类的使用小结

开发者 https://www.devze.com 2025-08-21 10:31 出处:网络 作者: 有梦想的攻城狮
目录一、核心作用与定义二、常用方法详解1.排序相关2.反转与随机打乱3.搜索与替换4.极值查找5.集合修改6.不可变集合7.其他实用方法三、Java 11新增特性1.集合工厂方法2.方法增强四、与Java 8的差异1.默认垃圾收集器变
目录
  • 一、核心作用与定义
  • 二、常用方法详解
    • 1.排序相关
    • 2.反转与随机打乱
    • 3.搜索与替换
    • 4.极值查找
    • 5.集合修改
    • 6.不可变集合
    • 7.其他实用方法
  • 三、Java 11新增特性
    • 1.集合工厂方法
    • 2.方法增强
  • 四、与Java 8的差异
    • 1.默认垃圾收集器变更
    • 2.集合API扩展
    • 3.语言特性影响
  • 五、最佳实践建议
    • 六、总结

      一、核心作用与定义

      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, ATRllLYnjavafx]
        

      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");
        http://www.devze.comList<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 distanjavascriptce)

        循环移动元素(正数右移,负数左移)。

        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",php 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类内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号