共计 1037 个字符,预计需要花费 3 分钟才能阅读完成。
废话不多说,上代码
public class ArrayListTest {
@Test
public void testList() {List<Long> longList = new ArrayList<>();
longList.add(1L);
longList.add(2L);
longList.add(3L);
longList.add(4L);
longList.forEach(System.out::println);
System.out.println("----------------------------------");
List<Long> longList2 = Arrays.asList(1L, 2L, 3L);
longList2.add(4L);
longList2.forEach(System.out::println);
}
}
运行之后,你会看到如下后果
霎时感觉到本人窒息了有么有,是不是不敢相信本人的眼睛啊,连忙再运行一次,后果还是一样,就如下。
然而,愤恨归愤恨,还得解决不是,那咱们就来看看吧。
咱们晓得,longList
是咱们本人定义的一个 java.util.ArrayList
,咱们来看 java.util.ArrayList
的局部构造
会发现它其实重写了 add
办法,那咱们调用 add
办法增加元素,是没有任何故障的,想怎么玩就怎么玩。
那咱们接下来看看 Arrays.asList
这货产生了什么。
咱们进入办法看看实现
看到它返回了一个ArrayList
,是不是感觉也没什么违和的,而后你就又急了,预计我要是在你背后,你就是这个表情。
别着急,别着急,重点来了。
来来来,看正文,为什么说返回的这货是一个有着 list
表面的 array
呢,那咱们就进去看看。
进来之后你就感觉怪怪的,具体怪在哪儿吧,也说不上来,感觉看着这个包怎么那么欠抽呢。
嗷~~~,猛然想了一下,咱们常常用到的如同是 java.util.ArrayList
啊,这货居然是java.util.Arrays.ArrayList
这么一想就明确了,为什么作者说这货就是“披着羊皮的狼外婆”呢,呃呃,不对,是“披着 list
外皮的array
”。
而后咱们再看看这货的构造。
不必找了,我不会给你截图的,这货办法还是很多的,截图有点吃力。然而你必定找不到 add
办法。
而后你就“顿悟”了,哦,原来这货压根就不让我增加元素啊。
聪慧如你,当当前用到这种状况的时候就晓得该怎么做了吧。
因为你看到的白羊可能不是真正的白羊,可能只是披了一张白羊皮的狼外婆。
正文完