gpt4 book ai didi

更新另一个时 Java 列表已更改

转载 作者:行者123 更新时间:2023-12-03 20:22:42 24 4
gpt4 key购买 nike

假设我们有:

public class Test {

private List<String> mWorkList;
private List<String> mOriginalList;

public Test(List<String> list) {
mWorkList = list;
mOriginalList = list;
}

public void updateData(List<String> newList) {
mWorkList.clear();
mWorkList.addAll(newList);
}
}

我只想换 mWorkList但是 mOriginalList当我打电话时也改变了 updateData(List<String>) .
那么我该怎么做才能保持 mOriginalList正如最初在构造函数中分配的那样?

最佳答案

在 Java 中,您可以通过 传递变量引用 .这意味着,无论何时您执行诸如 mWorkList = list 之类的作业变量 mWorkList将指向 相同 在内存中的位置 list当前指向。如果你这样做 mOriginalList = list ,然后 mOriginalList也会指向那个位置。 IE。 所有三个列表 引用 同一个对象在那时候。

如果你想要独立的列表,你需要 复制 列表中的所有值到 新名单像这样:

List<String> myList = new ArrayList<>(otherList);
ArrayList 的这个构造函数自动添加其他列表中的所有值,这是它的 documentation .

您的代码可能如下所示:
public Test(List<String> list) {
mWorkList = new ArrayList<>(list);
mOriginalList = new ArrayList<>(list);
}

或者,如果您不打算更改 mOriginalList您也可以将其保留为 mOriginalList = list .但请记住,如果用户对 list 进行更改(来自您的类(class)之外)它们也会反射(reflect)在您的 mOriginalList 中。这很容易导致 讨厌的错误 .

关于更新另一个时 Java 列表已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com