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

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

前几天在使用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库提供了许多比较有用的工具类,可以尝试了解使用一下。

目录
相关文章
Arrays.asList、ArrayList.subList使用规范
Arrays.asList、ArrayList.subList使用规范
|
3月前
|
Java
CTO的严厉警告:慎用Arrays.asList与ArrayList.subList
【8月更文挑战第13天】在软件开发的世界里,每一个决定都可能对项目的成败产生深远影响。作为CTO,我时常需要站在技术战略的高度,审视团队中的每一个技术选择。今天,我想就两个常被误用或滥用的Java集合操作——Arrays.asList和ArrayList.subList——分享一些深刻的见解,希望能为工作学习中的技术同仁敲响警钟。
28 6
Arrays.asList之后不要调用修改操作
Arrays.asList之后不要调用修改操作
|
Java API Apache
Arrays.asList():使用指南
Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合。这个方法可以作为数组和集合之间的桥梁,方便我们使用集合的一些方法和特性。本文将给大家介绍 Arrays.asList() 的语法、应用场景、坑点和总结。
199 0
|
Java C++
List.of() Vs Arrays.asList()
在上面的示例中,List.of() 用于创建不可变的颜色列表。任何通过添加或删除元素来修改列表的尝试都将导致抛出异常。 Arrays.asList() 当我们想要由指定数组支持的固定大小(可序列化)集合时,请使用此方法。对返回集合的任何更改也将写入原始数组。 java
69 0
|
Java
Arrays.asList()方法 讲解
Arrays.asList()方法 讲解
116 0
CTO:在项目中使用Arrays.asList、ArrayList.subList,就立马滚
1. 使用Arrays.asList的注意事项 1.1 可能会踩的坑 先来看下Arrays.asList的使用:
|
C++ 存储 Java
Arrays.copyOf()与System.arraycopy()的区别
Arrays.copyOf()与System.arraycopy()的区别
187 0
Arrays.copyOf()与System.arraycopy()的区别
|
Java C++ 索引
Arrays.asList() vs Collections.singletonList()
看了 IDEA 的告警: 与 Collections.singletonList 比,使用 Arrays.asList 来生成一个list是否更有优势?后者还能使得返回的list不可变。
146 0