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开发人员有所帮助。