immutablelist java_理解不可变集合 | Guava Immutable与JDK unmodifiableList
时间: 2024-04-03 12:33:49 浏览: 14
ImmutableList 和 JDK 中的 unmodifiableList 都是用来创建不可变集合的类,但它们有一些区别。
JDK 中的 unmodifiableList 方法接受一个 List 对象作为参数,返回一个只读的视图,该视图可以查看原始列表中的元素,但不能修改它。但是,如果原始列表被修改,那么该视图也会受到影响。因此,JDK 中的 unmodifiableList 并不是真正的不可变集合。
Google Guava 中的 ImmutableList 是真正的不可变集合,它创建一个新的不可变列表,该列表不会受到原始列表的影响,也不会对原始列表产生任何影响。ImmutableList 提供了一些方法来访问列表中的元素,但不能添加、删除或修改元素。
由于 ImmutableList 是不可变的,因此它是线程安全的,并且可以被多个线程同时访问。使用 ImmutableList 可以使代码更加简洁、可读性更高,并且避免了一些常见的线程安全问题。
相关问题
java怎么创建不可变的map_Java中如何实现不可变Map详解
在Java中创建不可变的Map有多种方法,以下是其中的两种常见方式:
1. 使用Collections.unmodifiableMap()方法
这种方法是在创建Map对象后,通过调用Collections.unmodifiableMap()方法将其转换为不可变的Map。这个方法返回的是一个不可修改的Map视图,对其进行修改操作会抛出UnsupportedOperationException异常。
示例代码:
```
Map<String, String> mutableMap = new HashMap<>();
mutableMap.put("key1", "value1");
mutableMap.put("key2", "value2");
Map<String, String> immutableMap = Collections.unmodifiableMap(mutableMap);
```
2. 使用Guava库中的ImmutableMap类
Guava是Google开发的一个Java工具库,其中的ImmutableMap类可以用来创建不可变的Map对象。这个类提供了多种创建Map的方法,如of()、copyOf()等。
示例代码:
```
Map<String, String> immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2");
```
无论哪种方法创建的不可变Map,都可以安全地在多个线程间共享,因为它们是不可变的。
java代码实现 ImmutableList对象持续叠加另一个ImmutableList对象
可以使用Guava库中的ImmutableList类来实现ImmutableList对象持续叠加另一个ImmutableList对象的操作。以下是Java代码示例:
```java
import com.google.common.collect.ImmutableList;
public class ImmutableExample {
public static void main(String[] args) {
ImmutableList<String> list1 = ImmutableList.of("a", "b", "c");
ImmutableList<String> list2 = ImmutableList.of("d", "e", "f");
// 使用concat方法将两个ImmutableList对象叠加
ImmutableList<String> result = ImmutableList.<String>builder()
.addAll(list1)
.addAll(list2)
.build();
System.out.println(result); // 输出 [a, b, c, d, e, f]
}
}
```
在上述示例中,我们使用了`concat`方法将`list1`和`list2`叠加,生成了一个新的`ImmutableList`对象`result`。需要注意的是,由于`ImmutableList`对象本身是不可变的,因此每次叠加都会生成一个新的对象。