java Collections类介绍

Java 的 java.util.Collections 类提供了一组静态方法,用于操作或返回集合(如列表、集合和映射)。Collections 类是一个实用工具类,旨在为集合提供便捷的算法和操作。以下是对 Collections 类及其常用方法的介绍。

常用方法总结

  • 排序sort(List<T> list)sort(List<T> list, Comparator<? super T> c)
  • 查找binarySearch(List<? extends Comparable<? super T>> list, T key)binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
  • 反转reverse(List<?> list)
  • 旋转rotate(List<?> list, int distance)
  • 填充fill(List<? super T> list, T obj)
  • 复制copy(List<? super T> dest, List<? extends T> src)
  • 最小和最大min(Collection<? extends T> coll)max(Collection<? extends T> coll)
  • 同步集合synchronizedList(List<T> list)synchronizedSet(Set<T> s)synchronizedMap(Map<K, V> m)
  • 不可变集合unmodifiableList(List<? extends T> list)unmodifiableSet(Set<? extends T> s)unmodifiableMap(Map<? extends K, ? extends V> m)
排序
  • sort(List<T> list) :对列表进行升序排序,列表中的元素必须实现 Comparable 接口。

    List numbers = Arrays.asList(5, 3, 1, 4, 2);
    Collections.sort(numbers); // 排序后,numbers为 [1, 2, 3, 4, 5]

  • sort(List<T> list, Comparator<? super T> c):根据指定的比较器对列表进行排序。

    List names = Arrays.asList("Charlie", "Alice", "Bob");

    // 根据字符串长度排序
    Collections.sort(names, (s1, s2) -> s1.length() - s2.length());

注:Collections.sort(names, (s1, s2) -> s1.length() - s2.length()) 中 (s1, s2) -> s1.length() - s2.length() 这是一个 Lambda 表达式,用于实现 Comparator 接口的 compare 方法。

查找
  • binarySearch(List<? extends Comparable<? super T>> list, T key):使用二分搜索法在列表中查找元素,返回索引。列表必须是已排序的。

    List sortedNumbers = Arrays.asList(1, 2, 3, 4, 5);
    int index = Collections.binarySearch(sortedNumbers, 3); // 返回索引 2

  • binarySearch(List<? extends T> list, T key, Comparator<? super T> c):使用二分搜索法在指定比较器的列表中查找元素。

    List sortedNames = Arrays.asList("Alice", "Bob", "Charlie");
    int index = Collections.binarySearch(sortedNames, "Bob", String::compareTo); // 返回索引 1

最大和最小值
  • max(Collection<? extends T> coll):返回集合中的最大元素。

    List numbers = Arrays.asList(1, 2, 3, 4, 5);
    int max = Collections.max(numbers); // 返回 5

  • min(Collection<? extends T> coll):返回集合中的最小元素。

    int min = Collections.min(numbers); // 返回 1

逆序
  • reverse(List<?> list):将列表中的元素反转。

    List numbers = Arrays.asList(1, 2, 3, 4, 5);
    Collections.reverse(numbers); // 反转后,numbers为 [5, 4, 3, 2, 1]

随机化
  • shuffle(List<?> list):对列表进行随机打乱。

    Collections.shuffle(numbers); // numbers的元素顺序将被随机打乱

填充
  • fill(List<? super T> list, T obj):用指定元素替换列表中的所有元素。

    List list = new ArrayList<>(Arrays.asList("a", "b", "c"));
    Collections.fill(list, "z"); // list 现在是 ["z", "z", "z"]

拷贝
  • copy(List<? super T> dest, List<? extends T> src):将源列表中的所有元素复制到目标列表中。

    List dest = Arrays.asList(new String[3]);
    List src = Arrays.asList("a", "b", "c");
    Collections.copy(dest, src); // dest 现在是 ["a", "b", "c"]

不可变集合
  • unmodifiableList(List<? extends T> list):返回一个不可修改的视图。

    List list = Arrays.asList("a", "b", "c");
    List unmodifiableList = Collections.unmodifiableList(list);
    // unmodifiableList.add("d"); // 会抛出 UnsupportedOperationException

同步集合
  • synchronizedList(List<T> list):返回一个线程安全的列表。

    List list = new ArrayList<>();
    List syncList = Collections.synchronizedList(list);

示例总结

以下是一个综合示例,展示了 Collections 类的一些常用方法:

复制代码
import java.util.*;

public class CollectionsExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 1, 4, 2));

        // 排序
        Collections.sort(numbers);
        System.out.println("排序后: " + numbers);

        // 反转
        Collections.reverse(numbers);
        System.out.println("反转后: " + numbers);

        // 随机打乱
        Collections.shuffle(numbers);
        System.out.println("随机打乱后: " + numbers);

        // 查找最大和最小值
        int max = Collections.max(numbers);
        int min = Collections.min(numbers);
        System.out.println("最大值: " + max + ", 最小值: " + min);

        // 二分搜索
        Collections.sort(numbers);
        int index = Collections.binarySearch(numbers, 3);
        System.out.println("元素 3 的索引: " + index);

        // 同步集合
        List<String> syncList = Collections.synchronizedList(new ArrayList<>());
        syncList.add("a");
        syncList.add("b");
        System.out.println("同步集合: " + syncList);
    }
}

通过使用 Collections 类提供的这些方法,可以方便地对集合进行各种操作,提高代码的可读性和维护性。

参考:

Collections (Java SE 17 & JDK 17)

相关推荐
qfljg17 分钟前
OpenRewrite 实战指南
java
Sylvia33.22 分钟前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
2601_962071576 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww89491116 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
淡海水7 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero7 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-8 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
zww89491119 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
黑马程序员毕设10 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳10 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法