簡體   English   中英

在Java中更新相似的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM