2013-12-02 5 views
0

Предположим, у меня есть Объект с именем Index, этот объект имеет два атрибута Long id; , String name;, и у меня есть две на моей странице, проблема в том, что когда я редактирую имя индексного объекта в первом списке, редактируются во втором списке, а вот мой код, чтобы сделать эту проблему более понятным:Обновление похожих объектов в java

Index index1 = new Index(); 
index1.setName("1"); 
index1.setId(1); 

List<Index> indexes = new ArrayList<Index>(); 
indexes.add(index1); 

List<Index> newIndexes = new ArrayList<Index>(); 
newIndexes.add(index1); 

Теперь, если я обновлю имя индекса в indexes списке он модифицируется в newIndexes списке. примечание: индекс объекта имеет метод equals на поле Id.

Благодаря

ответ

0

Ссылка на номер index1 одинакова для обоих списков, поэтому изменение ссылки Index изменит ее в обоих случаях.

Клонирование List само по себе не будет устранять проблему, поскольку она будет клонировать List, но не ее элементы.

Вы должны выполнить глубокий-клон Listи его элементов (или инициализировать новый ArrayList, как вы делаете, и клонировать каждого из предыдущих List «s элементов), чтобы решить вашу проблему.

См. here для ознакомления.

0

Это происходит потому, что вы добавляете один и тот же объект в обоих списках или более точно ... вы добавить ссылку на тот же объект в обоих списках.

Таким образом, при обновлении объекта в одном списке он обновляется во втором списке, потому что это тот же объект.

Создайте копию объекта, прежде чем добавлять его ко второму списку, например. используя copy constructor.

+0

, так что же делать? – Shahe

0

Это потому, что index1 - это просто ссылка на объект. Итак, вы в основном добавляете ту же ссылку на оба списка. Вам нужно скопировать объект перед добавлением ко второму списку.

0

Когда вы добавляете объект в оба списка, ссылка на этот объект копируется в списки. И именно поэтому, когда вы помещаете объект из одного списка, он отражается обратно в другом. Чтобы этого избежать, вам нужно создать копию объекта и добавить его в другой список, чтобы оба не ссылались на один и тот же объект.

0

Это происходит потому, что, когда вы используете «Добавить» в списке массивов (и почти в каждом объекте сбора данных), коллекция добавляет «ссылку» объекта в свой список и не создает новый объект. Таким образом, когда оба index1 объектов на indexes и newIndexes в основном то же самое. При изменении его независимо от того, где, он будет изменен и на другом.

Смежные вопросы