跟着 Guava 学 Java 之 不可变集合("深入Guava学习Java:掌握不可变集合的应用与实践")
原创
一、引言
在Java编程中,集合是一个非常重要的概念。Java提供了多种集合类,如List、Set、Map等,用于存储和管理数据。然而,在使用这些集合时,有时我们需要保证集合中的数据不会被修改,以防止程序出现不可预期的失误。这时,不可变集合就派上了用场。本文将介绍怎样使用Guava库中的不可变集合,以及它在实际编程中的应用与实践。
二、什么是不可变集合
不可变集合是指一旦创建后,其元素和结构都不能被修改的集合。这意味着你不能添加、删除或更改其中的元素。使用不可变集合的好处是它可以尽或许缩减损耗程序的可靠性,缩减失误出现的概率。此外,不可变集合在多线程环境下更加可靠,归因于它天然地避免了并发修改的问题。
三、Guava中的不可变集合
Google的Guava库提供了一系列的不可变集合类,如ImmutableList、ImmutableSet、ImmutableMap等。这些不可变集合类遵循了Java集合框架的约定,令它们可以很容易地替换原有的可变集合。
四、创建不可变集合
创建不可变集合有多种行为,以下是一些常用的方法:
1. 使用of方法
使用of方法可以直接传入元素,创建一个不可变集合。例如:
List
immutableList = ImmutableList.of("apple", "banana", "cherry"); Set
immutableSet = ImmutableSet.of("apple", "banana", "cherry"); Map
immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2");
2. 使用copyOf方法
使用copyOf方法可以将一个可变集合变成不可变集合。例如:
List
mutableList = Arrays.asList("apple", "banana", "cherry"); List
immutableList = ImmutableList.copyOf(mutableList); Set
mutableSet = new HashSet<>(Arrays.asList("apple", "banana", "cherry")); Set
immutableSet = ImmutableSet.copyOf(mutableSet); Map
mutableMap = new HashMap<>(); mutableMap.put("key1", "value1");
mutableMap.put("key2", "value2");
Map
immutableMap = ImmutableMap.copyOf(mutableMap);
3. 使用Builder
使用Builder可以灵活地构建不可变集合。例如:
List
immutableList = ImmutableList. builder() .add("apple")
.add("banana")
.add("cherry")
.build();
Set
immutableSet = ImmutableSet. builder() .add("apple")
.add("banana")
.add("cherry")
.build();
Map
immutableMap = ImmutableMap. builder() .put("key1", "value1")
.put("key2", "value2")
.build();
五、不可变集合的应用与实践
下面将通过一些实际场景,展示不可变集合的应用与实践。
1. 数据库查询导致
当从数据库查询导致时,我们通常不愿望调用方修改这些数据。这时,可以使用不可变集合来封装查询导致:
public List
queryEntities() { List
entities = ...; // 查询数据库 return ImmutableList.copyOf(entities);
}
2. 线程可靠
在多线程环境中,使用不可变集合可以避免并发修改的问题。例如,在实现一个线程可靠的计数器时,可以使用不可变集合来存储计数器的值:
public class Counter {
private final AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
public List
getCountHistory() { return ImmutableList.copyOf(count.getAndSet(0));
}
}
3. 防止外部修改
在API设计时,我们或许愿望返回的数据不能被外部修改,以保护数据的完整性。这时,可以使用不可变集合来封装数据:
public class MyService {
private final List
data = ImmutableList.of("apple", "banana", "cherry"); public List
getData() { return data;
}
}
六、总结
不可变集合在Java编程中具有广泛的应用场景。使用Guava库中的不可变集合类,可以方便地创建和操作不可变集合。通过本文的介绍,我们了解了不可变集合的概念、创建方法以及在实践中的应用。掌握不可变集合的使用,将有助于尽或许缩减损耗程序的可靠性和稳定性。