JAVA9新特性,集合工厂方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA9新特性,集合工厂方法相关的知识,希望对你有一定的参考价值。
通常,您希望在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。
实例化集合,几个 “add” 调用,使得代码重复。
1 List<String> myList = new ArrayList<String>(); 2 myList.add("张三"); 3 myList.add("李四"); 4 myList.add("王五"); 5 6 Map<String, Integer> myMap = new HashMap<String,Integer>(); 7 myMap.put("张三", 23); 8 myMap.put("李四", 24); 9 myMap.put("王五", 23);
Java 9,添加了几种集合工厂方法:
1 List<String> myList = List.of("张三","李四","王五"); 2 Set<Integer> mySet = Set.of(1,2,3); 3 Map<String, Integer> myMap = Map.of("张三",23,"李四",24,"王五",23);
除了更短和更好阅读之外,这些方法也可以避免您选择特定的集合实现。
事实上,从工厂方法返回已放入数个元素的集合实现是高度优化的。这是可能的,因为它们是不可变的:在创建后,继续添加元素到这些集合会导致 “UnsupportedOperationException” 。
这个功能在java7和java8的时候就传说过,网上传的是这样的:
1 final List<Integer> piDigits = [ 1,2,3,4,5,8 ];
JDK1.7和1.8并没有此特性,而JDK1.9也需要of();实现的。
注意:它们是不可变的,也就是说实例化后不能再进行add();会抛出“UnsupportedOperationException”。
1 List<String> list = List.of("1","2"); 2 list.add("3");
那我们来看一下为什么是不可变的。
emmm,看来不只是add()。
* Container class for immutable collections. Not part of the public API.
* Mainly for namespace management and shared infrastructure.
*用于不可变集合的容器类。不是公共API的一部分。
*主要用于命名空间管理和共享基础设施。
搞不懂这么做有什么用,与直接用数组有什么区别,有研究的朋友可以指点一下。
1 abstract static class AbstractImmutableList<E> extends AbstractList<E> 2 implements RandomAccess, Serializable { 3 @Override public boolean add(E e) { throw uoe(); } 4 @Override public boolean addAll(Collection<? extends E> c) { throw uoe(); } 5 @Override public boolean addAll(int index, Collection<? extends E> c) { throw uoe(); } 6 @Override public void clear() { throw uoe(); } 7 @Override public boolean remove(Object o) { throw uoe(); } 8 @Override public boolean removeAll(Collection<?> c) { throw uoe(); } 9 @Override public boolean removeIf(Predicate<? super E> filter) { throw uoe(); } 10 @Override public void replaceAll(UnaryOperator<E> operator) { throw uoe(); } 11 @Override public boolean retainAll(Collection<?> c) { throw uoe(); } 12 @Override public void sort(Comparator<? super E> c) { throw uoe(); } 13 }
以上是关于JAVA9新特性,集合工厂方法的主要内容,如果未能解决你的问题,请参考以下文章
Java基础学习总结(184)—— 从 Java 9 到 Java 17 的新特性解读