[英]Updating similar objects in java
假設我有一個名為Index
的對象,該對象具有兩個屬性Long id; , String name;
Long id; , String name;
並且我的頁面中有兩個ArrayLists
,問題是當我在第一個列表中編輯索引對象的名稱時,它也在第二個列表中進行編輯,這是我的代碼,使問題更易於理解:
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
列表中更新indexes
的名稱,那么它將在newIndexes
列表中更新。 注意:對象索引在Id
字段上具有equals方法。
謝謝
這是因為index1
只是對對象的引用。 因此,您基本上將相同的引用添加到兩個列表中。 您需要先復制對象,然后再添加到第二個列表。
當您將對象添加到兩個列表中時,該對象的引用將被復制到列表中。 這就是為什么當您從一個列表中選擇對象時,它會在另一個列表中反映出來的原因。 為避免這種情況,您需要創建該對象的副本並將其添加到另一個列表中,以使兩者都不會引用同一對象。
發生這種情況的原因是,當您在數組列表(以及幾乎每個數據收集對象)中使用“添加”時,集合會將對象的“引用”添加到其列表中,而不是創建新對象。 因此,當indexes
處的index1
對象和newIndexes
基本上相同時。 無論何時何地進行更改,其他位置也將進行更改。
兩個列表的引用index1
相同,因此更改引用的Index
將在兩個列表中對其進行更改。
克隆List
本身無法解決您的問題,因為它將克隆List
但不能克隆其元素。
您需要執行的深克隆List
及其要素(或初始化一個新ArrayList
,因為你做的,每個克隆以前的List
的元素),以解決您的問題。
有關如何操作,請參見此處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.