转载

Arrays.asList()为什么不能remove?

认真写文章,用心做分享。

个人网站:yasinshaw.com

公众号:xy的技术圈

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

Arrays.asList()为什么不能remove?

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

Arrays.asList()为什么不能remove?

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

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

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

Arrays.asList()为什么不能remove?

但这里需要注意的是,两者还是有一些小区别的。比如,Arrays.asList()方法返回的List是可以进行 set 操作的,但List.of()的不可以。

如果想要用这种简洁性,又希望能够在后续添加或者删除元素,应该怎么办呢?可以自己写一个方法,类似于这样:

Arrays.asList()为什么不能remove?

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

Arrays.asList()为什么不能remove?

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

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

原文  https://juejin.im/post/5d48b8296fb9a06b130f0b11
正文到此结束
Loading...