如果
new ArrayList<ArrayList<class2>>(foo)
沒有達到預期的效果,我假設你想要的是一個深拷貝。
這樣做將是序列化和反序列化,然後它,也最簡單的方法 - 這將與所有序列化對象的工作,無論複雜的(集合的集合集合....對象):
ArrayList<ArrayList<class2>> obj = null;
try {
FastByteArrayOutputStream fbos =
new FastByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(fbos);
out.writeObject(foo);
out.flush();
out.close();
ObjectInputStream in =
new ObjectInputStream(fbos.getInputStream());
obj = (ArrayList<ArrayList<class2>>) in.readObject();
}
catch(IOException e) {
e.printStackTrace();
}
catch(ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
return obj;
雖然您必須將class2聲明爲Serializable。 如果這不是一種選擇,你必須與
new ArrayList<ArrayList<class2>>(foo.get(i));
來聲明遍歷所有的ArrayList foo中的特定方法,把它們拷貝,然後把它們放入造成的ArrayList。
魔術字在這裏是「參考」。這就是爲什麼現代語言不會迫使你從頭開始瞭解指針和引用的原因。 –
@ThorstenDittmar顯然它*確實會迫使你學習引用,否則問題就不需要問了。 –
@DaveNewton當然,但只有當問題出現時。 –