java.util的Collections类

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。

Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。

Empty集合

用来创建一个空的集合

EmptySet
EmptyList
EmptyMap

Singleton集合

单例集合用来创建仅包含一个对象的集合,集合不可修改,元素可为null,多线程安全( 这并不意味着对列表中元素的引用是线程安全的。如果列表中存储的是可变对象,并且多个线程可能会修改这些对象,那么你仍然需要在访问这些对象时采取适当的同步措施。)

  • SingletonSet

  • SingletonList

  • SingletonMap : key ,value 均可为null

示例代码:

List<String> list = Collections.singletonList(null);

System.out.println(list.get(0));

Map<String, String> map = Collections.singletonMap("dd", null);

System.out.println( map.get("dd"));

Set<Object> set = Collections.singleton(null);

System.out.println(set);

UnmodifiableCollection 集合

用于包装集合,生成一个不可修改的集合,新集合不允许添加、删除或修改元素。 常用于返回集合的副本,以避免外部代码意外修改原始集合,增强代码的安全性和稳定性。需要注意的是仅副本不可修改,源集合任然可以修改,而且修改的内容会反馈到副本集合中。

public static void main(String[] args) {


    // 创建一个可修改的集合
    List<String> modifiableList = new ArrayList<>();
    modifiableList.add("Apple");
    modifiableList.add("Banana");
    modifiableList.add("Cherry");


    // 创建一个不可修改的集合
    Collection<String> unmodifiableList = Collections.unmodifiableCollection(modifiableList);


    // 输出不可修改的集合
    System.out.println("Unmodifiable Collection: " + unmodifiableList);


    // 尝试修改集合
    try {
        unmodifiableList.add("Date"); // 将抛出 UnsupportedOperationException
    } catch (UnsupportedOperationException e) {
        System.out.println("Cannot modify unmodifiable collection: " + e.getMessage());
    }


    // 修改原始集合
    modifiableList.add("Date");
    System.out.println("Modified Original Collection: " + modifiableList);
    System.out.println("Unmodifiable Collection after original modification: " + unmodifiableList);


}

输出:

Unmodifiable Collection: [Apple, Banana, Cherry]
Cannot modify unmodifiable collection: null
Modified Original Collection: [Apple, Banana, Cherry, Date]
Unmodifiable Collection after original modification: [Apple, Banana, Cherry, Date]

CheckedCollection 集合

用于创建一个集合,在创建的时候指定元素类型。该集合会在添加或修改元素时进行类型检查,若类型检查不通过将抛异常。

public static void main(String[] args) {
    // 创建一个可修改的集合
    Collection<String> stringList = new ArrayList<>();

    // 创建一个类型安全的集合,指定只能包含 String 类型的元素
    Collection<String> checkedCollection = Collections.checkedCollection(stringList, String.class);

    // 添加元素
    checkedCollection.add("Apple");
    checkedCollection.add("Banana");

    // 输出集合内容
    System.out.println("Checked Collection: " + checkedCollection);

    // 尝试添加不匹配的类型
    try {
        // 将抛出 ClassCastException
        checkedCollection.add((String) (Object) 123); // 强制转换以模拟错误
    } catch (ClassCastException e) {
        System.out.println("Caught ClassCastException: " + e.getMessage());
    }

    // 打印最终的集合内容
    System.out.println("Final Checked Collection: " + checkedCollection);
}

synchronizedCollection 方法

将指定集合包装为线程安全的对象。遍历的时候必须添加 synchronized 关键字。

public static void main(String[] args) {

    // 创建一个普通的 ArrayList
    Collection<String> list = new ArrayList<>();

    // 使用 Collections.synchronizedCollection 创建一个线程安全的集合
    Collection<String> synchronizedList = Collections.synchronizedCollection(list);


    // 添加元素到同步集合
    synchronizedList.add("Hello");
    synchronizedList.add("World");


    // 遍历集合时需要显式同步
    synchronized (synchronizedList) {
        for (String item : synchronizedList) {
            System.out.println(item);
        }
    }

}

replaceAll 方法

用于替换集合中所有出现的指定元素为新的指定元素, replaceAll 方法是直接在原集合上进行操作,因此它不会返回一个新的集合, 替换操作是基于 equals 方法进行的,因此要确保 oldVal 的类型与集合中的元素类型相同。

public static void main(String[] args) {
    // 创建一个包含多个元素的列表
    List<String> fruits = new ArrayList<>();
    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Apple");
    fruits.add("Orange");


    // 输出原始列表
    System.out.println("Original List: " + fruits);


    // 替换所有 "Apple" 为 "Mango"
    Collections.replaceAll(fruits, "Apple", "Mango");


    // 输出替换后的列表
    System.out.println("Updated List: " + fruits);
}

目录
相关文章
|
7天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
16天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
21天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
71 4
|
21天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
42 2
|
26天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
1月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
29天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
31 3
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
24 5
|
4月前
|
Java 开发者
奇迹时刻!探索 Java 多线程的奇幻之旅:Thread 类和 Runnable 接口的惊人对决
【8月更文挑战第13天】Java的多线程特性能显著提升程序性能与响应性。本文通过示例代码详细解析了两种核心实现方式:Thread类与Runnable接口。Thread类适用于简单场景,直接定义线程行为;Runnable接口则更适合复杂的项目结构,尤其在需要继承其他类时,能保持代码的清晰与模块化。理解两者差异有助于开发者在实际应用中做出合理选择,构建高效稳定的多线程程序。
60 7