尝试使用以下内容添加到List的前面但抛出添加。该医生说它应该改变。修复或解决方法是什么?
List<String> whatever = Arrays.asList("Blah1", "Blah2");
whatever.add(0, "BlahAll"); // <- Throws
答案 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");