我正在尝试复制一个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
不相等,因此不相互引用,因为我正在使用 Lists 一个递归函数,应该将列表添加到地图中。