Java - 链表初始化不正确

标签 java list initialization

我想实现一个“后退”按钮,为此,在我输入任何功能之前,我将数据从主列表复制到我的临时列表中。当用户点击“后退”按钮时,我调用 tempList 而不是 mainList。

但是尽管我用 mainList 的旧值初始化了 tempList(仅一次),但在函数之后 tempList 具有 mainList 的新值....

代码:

     ObservableList<List<String>> fnlData;

     List<List<String>> fnlDataTMP;
     .
     .

private void cnvrtColumn() {

        fnlDataTMP = fnlData;

        delWV();//if the mainList(fnlData) has a change in any of this functions, the tmpList also updates the values
        delWM();
        addVN();
        addWV();
        addWM();
        dateFormat();
        changeChar();

        finalTable.getSelectionModel().clearSelection();
        finalTable.getItems().clear();
        finalTable.getColumns().clear();
        createColumns();
        finalTable.getItems().addAll(fnlData);
}

最佳答案

当您执行 List listA = listB 时,您只是告诉 listA 和 listB 指向同一个列表。如果您希望 listA 成为具有相同值的列表,但不是实际相同的值,您必须手动复制它们。

由于列表是可变的,您不能只克隆外部列表,您必须遍历它并克隆每个内部列表。

所以:

List<List<String>> newList = new ArrayList<List<String>>();
for(List<String> ls : outerList) {
    newList.add(oldArrayList.clone();
}

这将为您提供一个克隆列表列表,您可以自由更改 newList 中的所有列表,而不会影响 oldList 中的任何内容。由于 innerLists 包含字符串(并且字符串在创建后无法更改),您不必担心只是克隆 innerLists。

关于Java - 链表初始化不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31695503/

相关文章:

python - 如何对具有字符串格式的 float 和非数字值的列表进行排序?

c++ - 在成员初始化器列表中,我可以创建对不在列表中的成员变量的引用吗?

java - 免费 MySQL Web 主机连接 java 桌面应用程序

java - 如果我的类(class)已经在扩展另一个类(class),如何使用 unicastremoteobject ...?

java - 数独游戏序列化问题

C++ 显式声明在默认构造函数中触发警告

java - 使用初始化程序在构造函数 VS 中完成工作

java - Vaadin 中的过滤器树

c# - 在 List<int> 中查找(并替换)相邻的相等/相似元素

python - 不可哈希类型 : 'list' in dictionary