Java 9中为集合添加了哪些工厂方法?

1. Java 9中集合的新特性简介

Java 9中为集合添加了许多新特性,其中包括提供了许多工厂方法来创建集合实例。

Java 9中新增了9个集合工厂方法,它们都是Java.util包中的静态方法,这些工厂方法可用于创建不同类型的集合实例,如List、Set和Map等。

Java 9中新增的集合工厂方法列表如下:

List.of()

Set.of()

Map.of()

Map.ofEntries()

2. List.of()工厂方法

2.1 创建List集合实例

List.of()是Java 9中新增的一个静态工厂方法,它可以用于创建一个不可变的List集合实例,该工厂方法接受任意数量的参数,最多可以接受10个参数:

List list1 = List.of();

List list2 = List.of("A");

List list3 = List.of("A", "B", "C");

// 非法示例,会抛出java.lang.NullPointerException异常

List list4 = List.of("A", null, "C");

// 非法示例,会抛出java.lang.IllegalArgumentException异常

List list5 = List.of("A", "A", "B", "C");

其中,当不给定任何参数时,List.of()方法将返回一个空的List集合实例;当给定一个参数时,List.of()方法将返回一个只包含该参数的List集合实例;当给定多个参数时,List.of()方法将返回一个包含这些参数的List集合实例。

从上面的代码示例中可以看出,List.of()方法不支持null元素,如果需要创建包含null元素的List集合实例,可以使用Arrays.asList()方法:

List list6 = Arrays.asList("A", null, "C");

2.2 创建只读List集合实例

List集合在Java中是常用的一种数据结构,它是一个有序的集合,可以存有重复的元素。Java 9中新增的List.of()方法可以用于创建一个不可变的只读List集合实例,该集合不支持添加、删除和替换元素操作,如果尝试进行这些操作,会抛出UnsupportedOperationException异常。

下面是一个示例代码:

List list7 = List.of("A", "B", "C");

try {

list7.add("D");

} catch (UnsupportedOperationException e) {

System.err.println(e);

}

该示例代码尝试向只读的List集合实例中添加一个元素,由于只读的List集合实例不支持添加操作,所以会抛出UnsupportedOperationException异常。

3. Set.of()工厂方法

3.1 创建Set集合实例

Set.of()是Java 9中新增的一个静态工厂方法,用于创建一个不可变的Set集合实例,该方法接受任意数量的参数,最多可以接受10个参数:

Set set1 = Set.of();

Set set2 = Set.of("A");

Set set3 = Set.of("A", "B", "C");

// 非法示例,会抛出java.lang.NullPointerException异常

Set set4 = Set.of("A", null, "C");

// 非法示例,会抛出java.lang.IllegalArgumentException异常

Set set5 = Set.of("A", "A", "B", "C");

可以看出,Set.of()方法的用法与List.of()方法类似,不支持null元素,如果需要创建包含null元素的Set集合实例,可以使用Collections.singleton()方法适配:

Set set6 = Collections.singleton(null);

3.2 创建只读Set集合实例

Java 9中新增的Set.of()方法也可以用于创建只读的Set集合实例,该集合不支持添加、删除和替换元素操作,如果尝试进行这些操作,会抛出UnsupportedOperationException异常。

Set set7 = Set.of("A", "B", "C");

try {

set7.add("D");

} catch (UnsupportedOperationException e) {

System.err.println(e);

}

该示例代码尝试向只读的Set集合实例中添加一个元素,由于只读的Set集合实例不支持添加操作,所以会抛出UnsupportedOperationException异常。

4. Map.of()工厂方法

4.1 创建Map集合实例

Map.of()是Java 9中新增的一个静态工厂方法,用于创建一个不可变的Map集合实例,该方法接受一个偶数个的参数,参数必须成对出现,其中第一个参数为Key,第二个参数为Value,最多可以接受10个键值对参数:

Map map1 = Map.of();

Map map2 = Map.of("A", 1);

Map map3 = Map.of("A", 1, "B", 2, "C", 3);

// 非法示例,会抛出java.lang.NullPointerException异常,因为null不是合法的Map Key

Map map4 = Map.of("A", null, "B", 2, "C", 3);

// 非法示例,会抛出java.lang.IllegalArgumentException异常,因为重复的Map Key是不允许的

Map map5 = Map.of("A", 1, "A", 2, "B", 3);

可以看出,Map.of()方法的用法与List.of()和Set.of()方法类似,不支持null Key和重复的Key,如果需要创建包含null Key或重复的Key的Map集合实例,可以使用Collections.singletonMap()方法适配:

Map map6 = Collections.singletonMap(null, 0);

Map map7 = new HashMap<>();

map7.put("A", 1);

map7.put("A", 2);

map7.put("B", 3);

4.2 创建只读Map集合实例

Java 9中新增的Map.of()方法也可以用于创建只读的Map集合实例,该集合不支持添加、删除和替换元素操作,如果尝试进行这些操作,会抛出UnsupportedOperationException异常。

Map map8 = Map.of("A", 1, "B", 2, "C", 3);

try {

map8.put("D", 4);

} catch (UnsupportedOperationException e) {

System.err.println(e);

}

该示例代码尝试向只读的Map集合实例中添加一个键值对,由于只读的Map集合实例不支持添加操作,所以会抛出UnsupportedOperationException异常。

5. Map.ofEntries()工厂方法

5.1 创建具有多个键值对的Map集合实例

Java 9中新增的Map.ofEntries()方法可以用于创建一个不可变的Map集合实例,该方法接受一个Entry类型的可变参数列表,用于指定Map的键值对,使用Map.entry()方法来创建Entry实例。下面是一个示例:

Map map9 = Map.ofEntries(

Map.entry("A", 1),

Map.entry("B", 2),

Map.entry("C", 3)

);

5.2 创建只读Map集合实例

Java 9中新增的Map.ofEntries()方法也可以用于创建只读的Map集合实例,该集合不支持添加、删除和替换元素操作,如果尝试进行这些操作,会抛出UnsupportedOperationException异常。

Map map10 = Map.ofEntries(

Map.entry("A", 1),

Map.entry("B", 2),

Map.entry("C", 3)

);

try {

map10.put("D", 4);

} catch (UnsupportedOperationException e) {

System.err.println(e);

}

该示例代码尝试向只读的Map集合实例中添加一个键值对,由于只读的Map集合实例不支持添加操作,所以会抛出UnsupportedOperationException异常。

总结

Java 9中为集合添加了许多新特性,其中包括提供了许多工厂方法来创建不同类型的集合实例。List.of()、Set.of()和Map.of()方法可以用于创建不可变的集合实例,而List.of()、Set.of()、Map.of()和Map.ofEntries()方法还可以用于创建只读的集合实例,这些集合不支持添加、删除和替换元素操作。以上就是关于Java 9中集合的新特性的详细介绍,希望对Java开发人员有所帮助。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签