不可变集合(ImmutableSet())的常见操作及实现方式
发布时间:2023-12-14 22:14:47
不可变集合(ImmutableSet())是指一旦创建后就不可再进行修改的集合,即集合中的元素无法被添加、删除或修改。这样的特性使得不可变集合在多线程环境下更加安全,并且可以提高程序的性能和可读性。
不可变集合的常见操作包括:创建、获取大小、获取元素、判断是否包含元素、判断是否为空集合、判断是否相等、转换为可变集合。
实现不可变集合的方式有多种,下面介绍常用的两种方式:使用构造器和使用Builder。
1. 使用构造器创建不可变集合:
ImmutableSet可以通过构造器创建,并使用of()方法指定集合的元素。
ImmutableSet<String> immutableSet = ImmutableSet.of("red", "green", "blue");
使用构造器创建不可变集合时,通过of()方法可以一次性添加多个元素。此外,还可以使用copyOf()方法传入可变集合来创建不可变集合:
Set<String> set = new HashSet<>();
set.add("red");
set.add("green");
set.add("blue");
ImmutableSet<String> immutableSet = ImmutableSet.copyOf(set);
使用构造器创建的不可变集合具有不可变性,对不可变集合进行任何修改操作都会抛出UnsupportedOperationException异常。
immutableSet.add("yellow"); // unsupported operation
2. 使用Builder创建不可变集合:
使用Builder创建不可变集合可以方便地逐个添加元素,并在最后构建出不可变集合。
ImmutableSet<String> immutableSet = ImmutableSet.<String>builder()
.add("red")
.add("green")
.add("blue")
.build();
使用Builder创建不可变集合时,可以通过add()方法逐个添加元素,并通过build()方法构建出不可变集合。Builder还提供了addAll()方法用于添加多个元素:
Set<String> set = new HashSet<>();
set.add("red");
set.add("green");
set.add("blue");
ImmutableSet<String> immutableSet = ImmutableSet.<String>builder()
.addAll(set)
.build();
使用Builder创建的不可变集合也具有不可变性,无法进行任何修改操作。
immutableSet.add("yellow"); // unsupported operation
不可变集合的常见操作示例:
import com.google.common.collect.ImmutableSet;
public class ImmutableSetExample {
public static void main(String[] args) {
// 使用构造器创建不可变集合
ImmutableSet<String> immutableSet = ImmutableSet.of("red", "green", "blue");
System.out.println(immutableSet); // [red, green, blue]
// 使用Builder创建不可变集合
ImmutableSet<String> immutableSet2 = ImmutableSet.<String>builder()
.add("red")
.add("green")
.add("blue")
.build();
System.out.println(immutableSet2); // [red, green, blue]
// 获取集合大小
System.out.println(immutableSet.size()); // 3
// 获取元素
System.out.println(immutableSet.iterator().next()); // red
// 判断是否包含元素
System.out.println(immutableSet.contains("red")); // true
// 判断是否为空集合
System.out.println(immutableSet.isEmpty()); // false
// 判断是否相等
System.out.println(immutableSet.equals(immutableSet2)); // true
// 转换为可变集合
ImmutableSet<String> mutableSet = immutableSet.asSet();
System.out.println(mutableSet); // [red, green, blue]
mutableSet.add("yellow");
// 修改不可变集合
immutableSet.add("yellow"); // unsupported operation
}
}
以上是使用Google Guava库中的ImmutableSet实现不可变集合的常见操作及实现方式的示例。不可变集合在保证程序安全性和性能的同时,还能提高代码的可读性,特别适用于多线程环境下。
