我怎么克隆一个通用名单在Java?
题
我有一个 ArrayList<String>
我想要返回的副本。 ArrayList
有一个克隆方法,该方法具有以下特征:
public Object clone()
之后我把这种方法,我怎么投返回的对象回来 ArrayList<String>
?
解决方案
ArrayList newArrayList = (ArrayList) oldArrayList.clone();
其他提示
为什么你想要的克隆?创建一个新的名单通常更有意义。
List<String> strs;
...
List<String> newStrs = new ArrayList<>(strs);
完成工作。
这是码我用用于:
ArrayList copy = new ArrayList (original.size());
Collections.copy(copy, original);
希望是有用的,为你
Java8中可以克隆与流。
import static java.util.stream.Collectors.toList;
...
List<AnObject> clone = myList.stream().collect(toList());
注意对象。克隆()具有一些重大问题,并且其使用劝阻在大多数情况下。请参见第11项,从"有效的Java"约书亚布洛克一个完整的答案。我相信你能安全地使用对象。克隆()关于基本类型阵列,但除此之外,你必须要明智关于正确使用和压倒一切的的克隆。你可能是更好界定复制的构造或静态工厂的方法明确的克隆的目的根据你的语义。
我认为这应该做到使用集API:
注意到:复制的方法运行在线性时间。
//assume oldList exists and has data in it.
List<String> newList = new ArrayList<String>();
Collections.copy(newList, oldList);
我发现使用addAll。
ArrayList<String> copy = new ArrayList<String>();
copy.addAll(original);
括号中的使用,而不是泛的语法
如果你想要这个,以便能够返回该列表中吸气,它会更好地做到:
ImmutableList.copyOf(list);
克隆一个通用的界面等 java.util.List
你只需要转换。在这里,你是一个例子:
List list = new ArrayList();
List list2 = ((List) ( (ArrayList) list).clone());
这是一个棘手,但它的工作,如果你是有限的返回 List
接口,所以任何人在你之后可以实现你的名单,每当他想要的。
我知道这个答案是接近最终答案,但我的答案回答如何做到所有这一工作时与 List
-通用父-不 ArrayList
时要非常小心克隆arraylist中.克隆在java是浅。这意味着,它将只克隆。本身而不是其成员。所以如果你有一个。X1和克隆成X2的任何改变X2会还表现在X1,反之亦然。当你的克隆,你只会产生一个新。用的指针,同元素在原来的。
这也应当工作:
ArrayList<String> orig = new ArrayList<String>();
ArrayList<String> copy = (ArrayList<String>) orig.clone()
ArrayList first = new ArrayList ();
ArrayList copy = (ArrayList) first.clone ();
我不是一个java专业,但是我有同样的问题并试图解决过这种方法。(这假设有一个构造复制).
public static <T extends Object> List<T> clone(List<T> list) {
try {
List<T> c = list.getClass().newInstance();
for(T t: list) {
T copy = (T) t.getClass().getDeclaredConstructor(t.getclass()).newInstance(t);
c.add(copy);
}
return c;
} catch(Exception e) {
throw new RuntimeException("List cloning unsupported",e);
}
}
List<String> shallowClonedList = new ArrayList<>(listOfStrings);
记住,这仅仅是一个浅水不深副本,即。你会得到一个新的名单,但该条目都是相同的。这是没有问题只字符串。得到更多的棘手的时名单的条目的对象自己.