尝试使用以下内容添加到列表的前面,但在添加时抛出。医生说应该换。修复或解决方法是什么?
List<String> whatever = Arrays.asList("Blah1", "Blah2");
whatever.add(0, "BlahAll"); // <- Throws
您不能将元素添加到使用创建的列表中Arrays.asList()
。正如文档所解释的:
返回由指定数组支持的固定大小的列表。
List
生成的不是Arrays.asList()
一个ArrayList
列表,而是另一个不支持该操作的列表(say 的合同List
是add()
可选的)
作为一种解决方法,您可以这样做:
List<String> whatever = new ArrayList(Arrays.asList("Blah1", "Blah2"));
whatever.add(0, "BlahAll");
Arrays.asList
返回一个固定大小的数组。如果您希望能够添加其他项目,则需要创建另一个List
对象,也许使用whatever = new ArrayList<String>(array)
.
它抛出了什么,UnsupportedOperationException?List 上的 add() 被记录为“可选操作”。当您通过 Arrays.asList() 创建列表时,它不会创建任何新的数据结构,它只是使用现有数组作为执行列表操作的基础(我认为)。这使得插入是不可能的。
您需要决定 List 的另一个实现,例如 LinkedList:
List<String> whatever = new LinkedList<String> (Arrays.asList("Blah1", "Blah2"));
(我没有测试过这个。)
在这里,您使用了数组而不是数组列表。
在解决问题之前阅读此内容
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");
试试谷歌图书馆,
import com.google.common.collect.Lists;
List<String> whatever = Lists.newArrayList("Blah1", "Blah2");
whatever.add(0, "BlahAll");