我想複製一個ArrayList
,但它似乎只是引用它,並沒有真正複製它。Java arraylist副本 - 克隆?
我的代碼:
List<Column> columns = columnData(referencedField.table);
List<Field> newPath = new ArrayList<>(startPath);
System.out.println("Equals? " + (newPath.equals(startPath)));
startPath
是ArrayList<Field>
被傳遞給函數。
場:
public class Field
{
public String table;
public String column;
public Field(final String table, final String column) {
this.table = table;
this.column = column;
}
@Override
public String toString() {
return "(" + table + ", " + column + ")";
}
@Override
public int hashCode() {
int hash = 3;
hash = 67 * hash + Objects.hashCode(this.table);
hash = 67 * hash + Objects.hashCode(this.column);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Field other = (Field) obj;
if (!Objects.equals(this.table, other.table)) {
return false;
}
if (!Objects.equals(this.column, other.column)) {
return false;
}
return true;
}
}
現在我已閱讀有關克隆它,但我不是在它經歷。我實際上想知道一個克隆是否真的會創建一個新對象的列表,使得它們不再相同,因爲相同的內容元素將是平等的。
所以要改一下,我要的是:要確保startPath
和newPath
是不相等的,正如我現在用的列表遞歸函數應該列表添加到地圖因此不參考海誓山盟。
好像我需要將函數從遞歸轉換爲迭代,然後在每次迭代結束時存儲List。正如現在列表正在「同時」修改,至少不是爲了順序。 – skiwi