[英]is there a way to convert an immutable list to a mutable one?
所以我想创建一个方法来将元素添加到不可变列表中,但我有点需要它是一个可变列表,以便在最后返回。 到目前为止,我已经创建了不可变列表的可变副本:
Grid2D add(int elem) {
List<Integer> newlist = new ArrayList<Integer>();
for (int i = 0; i < this.list.size(); i++) {
newlist.add(list.get(i));
}
newlist.add(elem);
return new Grid2D(newlist, this.numOfCols);
}
有没有办法将不可变列表转换为可变列表?
<\/blockquote>简短的回答是没有办法。
长答案是,这取决于您将“转换”为可变的意思。
显然,您可以创建不可变列表1<\/sup>的可变副本。 但缺点是可变列表是一个不同的列表。 复制后对不可变列表所做的更改不会反映在新列表中。 反之亦然。
如果您要“破解”不可变列表抽象,则可能会对其<\/em>进行变异。 (涉及到令人讨厌的反射,你需要知道具体的不可变列表类是如何实现的。)但这是一个非常糟糕的主意。 您的应用程序代码库的各个部分将假设不可变集合是不可变的。 违反不变量可能会使各种事情的行为不正确。
最后,如果“不可变列表”最初是使用
Collections.unmodifiableList<\/code>创建的,则它不是严格不可变的。
您可以通过修改由
unmodifiableList<\/code>调用包装的原始列表来修改它。
1 - 您不一定需要为此使用
ArrayList<\/code> 。<\/sup>
您可以使用任何
List<\/code>实现类,包括您从头开始编写的自定义实现。<\/sup>
但是您确实<\/em>需要使用
new<\/code>来创建一个新的
List<\/code>实例。<\/sup>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.