Как уже отмечали другие, клонирование ArrayList
не клонирует его элементы. Если вы хотите сделать глубокую копию содержимого, есть хитрый трюк: сериализация и десериализация массива. (Это работает, потому что ArrayList
и Integer
оба реализуют Serializable
.) Однако это не избавляет от необходимости подавлять предупреждения о непроверенной конверсии.
// Write the object out to a byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(this.items);
byte[] bytes = bos.toByteArray();
// Retrieve an input stream from the byte array and read
// a copy of the object back in.
ObjectInputStream in = new ObjectInputStream(
new ByteArrayInputStream(bytes));
ArrayList<Integer> items = (ArrayList<Integer>) in.readObject();
Если весь ваш объект может быть объявлен как Serializable, вы можете использовать его вместо операции клонирования для создания глубокой копии. Также см. в этой статье , чтобы узнать, как избежать затрат на копирование байтов из ByteArrayOutputStream
.
.