集合的工厂方法简介
在 Java 9 中,集合增加了一些新的方法,以便以简单且简洁的方式创建不可变列表。这些新的工厂方法被添加到了 List
、Set
和 Map
接口中,用于创建不可变实例。这些工厂方法主要是为了方便创建集合而设计的,使得创建集合的过程更加简练。
列表工厂方法语法
在 Java 9 之前,要创建一个不可变列表,需要使用以下语法:
List unmodifiableList = Collections.unmodifiableList(arrayList);
其中 arrayList
是一个可变的列表实例。因此,我们需要先创建一个列表,然后使用 unmodifiableList()
方法获取一个不可变的实例,从此实例中我们不能再添加或移除元素。
Java 9 中的列表工厂方法
从 Java 9 开始,可以使用以下方法创建一个不可变列表:
static <E> List<E> of();
static <E> List<E> of(E e1);
static <E> List<E> of(E... elements);
static <E> List<E> of(E e1, E e2);
static <E> List<E> of(E e1, E e2, E e3);
static <E> List<E> of(E e1, E e2, E e3, E e4);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10);
示例
从 Java 9 开始,可以使用以下语法创建一个不可变列表。of(E... elements)
方法可以用来创建包含超过十个元素的不可变列表。
List<String> unmodifiableList = List.of("A", "B", "C");
Java 9 之前的列表工厂方法示例
在这里,我们在 Java 9 之前创建了一个不可变列表。
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Tester {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list = Collections.unmodifiableList(list);
System.out.println(list);
}
}
编译并运行上述程序,将会得到如下结果:
[A, B, C]
Java 9 中的列表工厂方法示例
在这里,我们在 Java 9 中创建了一个不可变列表。
package com.tutorialspoint;
import java.util.List;
public class Tester {
public static void main(String[] args){
List<String> list = List.of("A","B","C");
System.out.println(list);
}
}
编译并运行上述程序,将会得到如下结果:
[A, B, C]
集合的工厂方法:Set 接口
同样地,Set
接口也拥有这些新的方法来创建一个不可修改的集合,从中我们不能添加或移除元素。
static <E> Set<E> of();
static <E> Set<E> of(E e1);
static <E> Set<E> of(E... elements);
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);
示例
从 Java 9 开始,可以使用以下语法创建一个不可变集合。of(E... elements)
方法可以用来创建包含超过十个元素的不可变集合。
Set<String> unmodifiableSet = Set.of("A", "B", "C");
Java 9 之前的 Set 工厂方法示例
在这里,我们在 Java 9 之前创建了一个不可变集合。
package com.tutorialspoint;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class Tester {
public static void main(String[] args){
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
set = Collections.unmodifiableSet(set);
System.out.println(set);
}
}
编译并运行上述程序,将会得到如下结果:
[A, B, C]
Java 9 中的 Set 工厂方法示例
在这里,我们在 Java 9 中创建了一个不可变集合。
package com.tutorialspoint;
import java.util.Set;
public class Tester {
public static void main(String[] args){
Set<String> set = Set.of("A","B","C");
System.out.println(set);
}
}
编译并运行上述程序,将会得到如下结果:
[A, B, C]
集合的工厂方法:Map 接口
在 Map
接口中,除了 of()
方法外,还可以使用 ofEntries(...)
方法来接收不定参数。
static <K,V> Map<K,V> of();
static <K,V> Map<K,V> of(K k1, V v1);
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10);
示例
从 Java 9 开始,可以使用以下语法创建一个不可变映射。
Map<String, String> unmodifiableMap = Map.of("A","Apple", "B", "Boy", "C", "Cat");
Java 9 之前的 Map 工厂方法示例
在这里,我们在 Java 9 之前创建了一个不可变映射。
package com.tutorialspoint;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Tester {
public static void main(String[] args){
Map<String, String> map = new HashMap<>();
map.put("A","Apple");
map.put("B","Boy");
map.put("C","Cat");
map = Collections.unmodifiableMap(map);
System.out.println(map);
}
}
编译并运行上述程序,将会得到如下结果:
{A=Apple, B=Boy, C=Cat}
Java 9 中的 Map 工厂方法示例
在这里,我们在 Java 9 中创建了一个不可变映射。
package com.tutorialspoint;
import java.util.Map;
public class Tester {
public static void main(String[] args){
Map<String, String> map = Map.of("A","Apple","B","Boy","C","Cat");
System.out.println(map);
}
}
编译并运行上述程序,将会得到如下结果:
{C=Cat, A=Apple, B=Boy}