资料内容:
1.2. new ArrayList
上面的数组转list方式虽然是最简单的,但不一定是合适的,特别是当我们可能对转换后的list进行
操作时,可能埋坑(而且这种坑还非常隐晦,代码层面上很难发现)
为了减少在代码里面下毒的可能性,不妨使用下面这种方式 new ArrayList<>
(Arrays.asList(ary))String[] ary = new String[]{ "1", "a"};
List<String> out = new ArrayList<>(Arrays.asList(ary));
out.add("hello");
System.out.println(out);
通过上面这种方式创建的List,就是我们熟知的 ArrayList 了
避雷预警
看到上面这个使用姿势,就很容易想到一个常见的踩雷点,比如我们的应用中,有一个全局共享
的配置列表,张三需要拿id为奇数的配置,李四拿id为偶数的配置,然后他们都是这么做的
list.removeIf(s -> s.id % 2 == 0);
然后跑了一次之后发现这个全局的列表清空了,这就是典型的没有做好资源隔离的case了,针对
这种场景,要么是限制使用方,直接针对全局的资源进行修改,要么就是使用方拿到的是一个隔
离的备份
禁止修改:
使用不可变的容器,如前面提到的 java.util.Arrays.ArrayList ()
使用 Collections.unmodifiableList 创建
List<String> unModifyList = Collections.unmodifiableList(out);
列表拷贝
new ArrayList<>(Arrays.asList(ary));
(上面这种属于深拷贝的实现,具体可以看一下jdk的源码实现)
1.3. Collections.addAll
第三种方式借助jdk提供的容器工具类 Collections 来实现