4

尝试使用以下内容添加到列表的前面,但在添加时抛出。医生说应该换。修复或解决方法是什么?

List<String> whatever = Arrays.asList("Blah1", "Blah2");
whatever.add(0, "BlahAll"); // <- Throws
4

6 回答 6

5

您不能将元素添加到使用创建的列表中Arrays.asList()。正如文档所解释的:

返回由指定数组支持的固定大小的列表。

于 2013-08-15T04:19:51.233 回答
4

List生成的不是Arrays.asList()一个ArrayList列表,而是另一个不支持该操作的列表(say 的合同Listadd()可选的)

作为一种解决方法,您可以这样做:

List<String> whatever = new ArrayList(Arrays.asList("Blah1", "Blah2"));
whatever.add(0, "BlahAll");
于 2013-08-15T04:20:26.140 回答
4

Arrays.asList返回一个固定大小的数组。如果您希望能够添加其他项目,则需要创建另一个List对象,也许使用whatever = new ArrayList<String>(array).

于 2013-08-15T04:21:16.687 回答
3

它抛出了什么,UnsupportedOperationException?List 上的 add() 被记录为“可选操作”。当您通过 Arrays.asList() 创建列表时,它不会创建任何新的数据结构,它只是使用现有数组作为执行列表操作的基础(我认为)。这使得插入是不可能的。

您需要决定 List 的另一个实现,例如 LinkedList:

List<String> whatever = new LinkedList<String> (Arrays.asList("Blah1", "Blah2"));

(我没有测试过这个。)

于 2013-08-15T04:23:08.433 回答
1

在这里,您使用了数组而不是数组列表。

在解决问题之前阅读此内容

Java 中 Array 和 ArrayList 的主要区别在于 Array 是一个固定长度的数据结构,而ArrayList是一个可变长度的 Collection 类。

一旦在 Java 中创建,您就无法更改 Array 的长度,但 ArrayList 在满时会根据容量和负载因子重新调整大小。

由于Array List在 Java 中由 Array 内部支持,因此 ArrayList 中的任何调整大小操作都会降低性能,因为它涉及创建新 Array 并将内容从旧数组复制到新数组

但是这里需要用到ArrayList,因为后期需要添加Data。

List<String> whatever = new ArratList(Arrays.asList("Blah1", "Blah2"));
whatever.add(0, "BlahAll");
于 2013-08-15T04:26:11.653 回答
1

试试谷歌图书馆,

import com.google.common.collect.Lists;

List<String> whatever = Lists.newArrayList("Blah1", "Blah2");
whatever.add(0, "BlahAll");
于 2013-08-15T04:27:38.380 回答