Java 9:Immutable Set的工厂方法详解

介绍

Oracle 在2017年3月左右发布Java新版本:Java SE9。陆续我会发表一系列有关Java SE 9新功能的文章,这是本系列的第四篇。

我已经发表了几篇有关Java SE 9新功能的文章。 在阅读这篇文章之前,请阅读它们。 这篇文章是 Java SE 9:Immutable List的工厂方法详解的延续。

在本文中,我将带着大家一起来讨论一下Java SE 9新功能:Immutable Set的工厂方法详解,并提供一些简单而合适的示例。

Java SE 8:空的不可变集合

在Java SE 8和更早版本中,如果我们要创建一个空的ImmutableUnmodifiable Set,则可以使用Collections类提供的静态方法:unmodifiableSet,如下所示:

 Set<String> emptySet = new HashSet<>();
 Set<String> immutableSet = Collections.unmodifiableSet(emptySet);

上述,我们可以看到创建一个简单的空集合是如此的繁琐且冗长。现在让我们在Java SE 9中看看该如何操作。

注意:<> 操作符在Java SE 6和早期版本中不起作用,其余代码在所有Java版本中通用。

Java SE 9:空的不可变集合

为了克服上述的这些缺点,Java SE 9在Set接口中引入了两个有用的方法,这样我们不需要使用这些繁琐的步骤来创建空的不可变集合。

通过Java SE 9 Set API,我们可以在Set接口中找到以下方法签名。

 static <E> Set<E> of()

它用于创建一个空的不可变集(一个具有零个元素的集合)。

 Set<String> immutableSet = Set.of();

在这里我们可以看到,在Java SE 9中创建一个空的不可变集合非常的容易。

Java SE 8:非空的不可变集合

在本节中,我们将看到如何在Java SE 8和更早版本中创建不可变的非空集合。我们可以使用Collections类中的unmodifiableable方法创建一个不可变的非空集合,如下所示:

 Set<String> nonemptySet = new HashSet<>();
 nonemptySet.add("one");
 nonemptySet.add("two");
 nonemptySet.add("three");
 Set<String> immutableSet = Collections.unmodifiableSet(nonemptySet);

注意:<> 操作符在Java SE 6和早期版本中不起作用,其余代码在所有Java版本中通用。

下面我们再来看看在Java SE 9 中是如何操作的。

Java SE 9:非空的不可变集合

在本节中,我们可以看到如何在Java SE 9版本中创建不可变的非空集合。通过查阅Java SE 9 Set Interface API,我们可以看到一组重载方法,如下所示:

static <E> Set<E> of(E e1)
static <E> Set<E> of(E e1,E e2) 
static <E> Set<E> of(E e1,E e2,E e3)
static <E> Set<E> of(E e1,E e2,E e3,E e4)
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5)  
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6) 
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6,E e7)    
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6,E e7,E e8)   
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6,E e7,E e8,E e9)  
static <E> Set<E> of(E e1,E e2,E e3,E e4,E e5,E e6,E e7,E e8,E e9,E e10)

例子:

 Set<String> immutableSet = Set.of("one","two","three");

创建一个不可变的非空集合非常简单。

让我们在Java SE 9 REPL中测试一下以上代码:

jshell> Set<String> immutableSet = Set.of("one","two","three")
immutableSet ==> [one, two, three]

在这里我们可以看到,在Java SE 9中创建非空不可变集合是如此的容易。

Java SE 9:变长参数的不可变集合

Oracle引入了另一种具有变长参数的Set.of()方法。以下是用于在Java SE 9中创建非空不可变集合的Var-Args方法

static <E> Set<E> of(E... elements)  

它主要用来创建带有元素数组的不可变集合,如下所示:

 String[] nameArr =  { "one", "two", "three"};
 Set<String[]> set= Set.<String[]>of(nameArr);

下面,我们在Java REPL 看一下执行的结果:

jshell> String[] nameArr =  { "one", "two", "three"}
nameArr ==> String[3] { "one", "two", "three" }

jshell> Set<String[]> set = Set.<String[]>of(nameArr);
set ==> [[Ljava.lang.String;@56ef9176]

jshell> set
set ==> [[Ljava.lang.String;@56ef9176]

上述,我们创建了带有字符串元素数组的不可变集合。

不可变集合的特征类似于不可变列表。您可以在这里详细找到这些信息:Java SE 9:Immutable List的工厂方法详解

以上就是Java SE 9:Immutable Set的工厂方法详解的基本信息。我们将在以后的文章中讨论更多Java SE 9新功能。

原文链接:https://www.journaldev.com/12984/javase9-factories-for-immutable-set

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。