Java资源分享网 - 专业的Java学习网站 学Java,上Java资源分享网
java实战演练35讲 PDF 下载
匿名网友发布于:2024-03-17 16:20:11
(侵权举报)
(假如点击没反应,多刷新两次就OK!)

java实战演练35讲 PDF 下载  图1

 

资料内容:

 

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 来实现