Arrays.asList()为何不能remove?

认真写文章,用心作分享。java

我的网站:yasinshaw.com工具

公众号:xy的技术圈单元测试

前几天在使用Arrays.asList方法的时候遇到一个问题:测试

1.png

与是去看了一下这个方法的源码,发现是返回的ArrayList呀,怎么会不支持remove操做呢?网站

2.png

后来仔细看了源码才发现,这个ArrayList并非咱们日常使用的java.util包下的ArrayList,而是Arrays类里面一个私有的内部类。这个内部类继承了AbstractList,但没有复写remove或者add等方法。因此它的长度不可变,这也与Arrays这个类的设计目的是契合的。设计

之因此用Arrays.asList()方法,是为了可以用尽可能简洁的代码获得一个List。这在写单元测试的时候是很常见的需求。code

在Java 9之后,可使用List.of()方法来代替Arrays.asList()方法。但其内部也是返回的一个不可变的List:cdn

3.png

但这里须要注意的是,二者仍是有一些小区别的。好比,Arrays.asList()方法返回的List是能够进行set操做的,但List.of()的不能够。blog

若是想要用这种简洁性,又但愿可以在后续添加或者删除元素,应该怎么办呢?能够本身写一个方法,相似于这样:继承

4.png

这种事情,固然已经有开源的库帮咱们作啦!Google Guava提供了一个Lists类,里面有一些newArrayList方法:

5.png

Google Guava库提供了许多比较有用的工具类,能够尝试了解使用一下。

更多文章,欢迎关注公众号:xy的技术圈

相关文章
相关标签/搜索