添加到列表前面抛出?

时间:2013-08-15 04:15:32

标签: java list

尝试使用以下内容添加到List的前面但抛出添加。该医生说它应该改变。修复或解决方法是什么?

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

6 个答案:

答案 0 :(得分:5)

您无法将元素添加到使用Arrays.asList()创建的列表中。正如documentation所解释的那样:

  

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

答案 1 :(得分:4)

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

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

List<String> whatever = new ArrayList(Arrays.asList("Blah1", "Blah2"));
whatever.add(0, "BlahAll");

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

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

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

(我没有测试过这个。)

答案 4 :(得分:1)

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

  

在解决问题之前阅读本文

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

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

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

但是你需要使用ArrayList,因为你需要在后期添加Data。

List<String> whatever = new ArratList(Arrays.asList("Blah1", "Blah2"));
whatever.add(0, "BlahAll");

答案 5 :(得分:1)

试试谷歌图书馆,

import com.google.common.collect.Lists;

List<String> whatever = Lists.newArrayList("Blah1", "Blah2");
whatever.add(0, "BlahAll");