前几天在使用Arrays.asList方法的时候遇到一个问题:
与是去看了一下这个方法的源码,发现是返回的ArrayList呀,怎么会不支持remove操作呢?
后来仔细看了源码才发现,这个ArrayList
并不是我们平常使用的java.util
包下的ArrayList,而是Arrays类里面一个私有的内部类。这个内部类继承了AbstractList
,但没有复写remove或者add等方法。所以它的长度不可变,这也与Arrays这个类的设计目的是契合的。
之所以用Arrays.asList()方法,是为了能够用尽量简洁的代码得到一个List。这在写单元测试的时候是很常见的需求。
在Java 9以后,可以使用List.of()
方法来代替Arrays.asList()方法。但其内部也是返回的一个不可变的List:
但这里需要注意的是,两者还是有一些小区别的。比如,Arrays.asList()方法返回的List是可以进行set
操作的,但List.of()的不可以。
如果想要用这种简洁性,又希望能够在后续添加或者删除元素,应该怎么办呢?可以自己写一个方法,类似于这样:
这种事情,当然已经有开源的库帮我们做啦!Google Guava提供了一个Lists类,里面有一些newArrayList方法:
Google Guava库提供了许多比较有用的工具类,可以尝试了解使用一下。