Java 不可变集合详解:示例和应用场景

在 Java 中,不可变集合指的是创建后不能被修改的集合对象。它们在多线程环境中更加安全,并且可以被共享和重用,但同时也限制了对集合的修改操作,只能进行读取操作。下面将通过多个例子来生动形象地说明 Java 中不可变集合的内容。

1. String 类

在 Java 中,String 类是不可变的。一旦创建了一个字符串对象,它的值就不能被改变。

String str = 'Hello';
str.concat(' World');
System.out.println(str); // 输出结果为'Hello'

在上面的例子中,尽管在 concat() 方法中使用了字符串连接操作,但是原始的字符串对象并没有被改变,因为 String 类是不可变的。

2. Immutable 集合类

Java 中提供了一些不可变的集合类,如 Collections.unmodifiableList()Collections.unmodifiableSet()Collections.unmodifiableMap() 等。这些集合类在创建后,不能被修改。

List<String> list = new ArrayList<>();
list.add('apple');
list.add('banana');
List<String> immutableList = Collections.unmodifiableList(list);
immutableList.add('orange'); // 抛出 UnsupportedOperationException 异常

在上面的例子中,通过调用 Collections.unmodifiableList() 方法创建了一个不可变的 List 对象,当尝试向该不可变 List 对象中添加元素时,会抛出 UnsupportedOperationException 异常。

3. 枚举类

枚举类是 Java 中的一种特殊类型,它的实例是不可变的。

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

Day day = Day.MONDAY;
day = Day.TUESDAY; // 可以重新赋值给 day 变量,但 Day 类的实例本身是不可变的

在上面的例子中,Day 枚举类的实例是不可变的,即无法改变它们的值。尽管可以重新赋值给 day 变量,但是枚举类的实例本身是不可变的。

4. BigInteger 类

Java 中的 BigInteger 类用于表示任意大小的整数,它也是不可变的。

BigInteger num1 = new BigInteger('1234567890');
BigInteger num2 = num1.add(BigInteger.ONE);
System.out.println(num1); // 输出结果为'1234567890'

在上面的例子中,虽然通过调用 add() 方法对 num1 进行了加 1 操作,但是 num1 的值并没有改变,因为 BigInteger 类是不可变的。

总结

Java 中的不可变集合是指一旦创建后就不能被修改的集合对象。这些不可变集合类在多线程环境中更加安全,并且可以被共享和重用,但是无法对其进行增删改操作,只能进行读取操作。

Java 不可变集合详解:示例和应用场景

原文地址: https://www.cveoy.top/t/topic/mUCU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录