もしも
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 として宣言する必要があります。これがオプションでない場合は、foo のすべての配列リストを反復処理し、それらをコピーする特定のメソッドを宣言する必要があります。
new ArrayList<ArrayList<class2>>(foo.get(i));
そして、それらを結果の ArrayList に入れます。