欢迎访问宙启技术站
智能推送

不可变集合(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实现不可变集合的常见操作及实现方式的示例。不可变集合在保证程序安全性和性能的同时,还能提高代码的可读性,特别适用于多线程环境下。