Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-LinkedList初始化不正确_Java_List_Initialization - Fatal编程技术网

Java-LinkedList初始化不正确

Java-LinkedList初始化不正确,java,list,initialization,Java,List,Initialization,我想实现一个后退按钮,为此,在输入任何函数之前,我从临时列表中的主列表复制数据。当用户单击back按钮时,我调用tempList而不是mainList 但是,尽管我只使用mainList的旧值初始化了tempList一次,但在函数完成之后,tempList拥有mainList的新值 代码: 您只是在添加对同一列表的引用 如果确实要复制列表,请按以下方式执行: fnlDataTMP = new ArrayList<List<String>>(fnlData); 假设fnl

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

但是,尽管我只使用mainList的旧值初始化了tempList一次,但在函数完成之后,tempList拥有mainList的新值

代码:


您只是在添加对同一列表的引用

如果确实要复制列表,请按以下方式执行:

fnlDataTMP = new ArrayList<List<String>>(fnlData);
假设fnlData列表中的列表被操纵,则必须这样做才能创建真正的副本:

fnlDataTMP = new ArrayList<List<String>>();
for (List<String> sublist : fnlData) {
    fnlDataTMP.add(new ArrayList<String>(sublist));
}

您只是在添加对同一列表的引用

如果确实要复制列表,请按以下方式执行:

fnlDataTMP = new ArrayList<List<String>>(fnlData);
假设fnlData列表中的列表被操纵,则必须这样做才能创建真正的副本:

fnlDataTMP = new ArrayList<List<String>>();
for (List<String> sublist : fnlData) {
    fnlDataTMP.add(new ArrayList<String>(sublist));
}

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

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

因此:


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

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

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

因此:

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

只需将其替换为:

ObservableList<List<String>> fnlData = XCollections.observableArrayList();
然后尝试:

private void cnvrtColumn() {

    fnlDataTMP = new ArrayList<List<String>>(fnlData);
....
只需将其替换为:

ObservableList<List<String>> fnlData = XCollections.observableArrayList();
然后尝试:

private void cnvrtColumn() {

    fnlDataTMP = new ArrayList<List<String>>(fnlData);
....

你没有复制数组。。。您只是在另一个变量中引用了它。您需要初始化fnlData…可能是您没有复制数组的副本。。。您刚刚在另一个变量中引用了它,您需要初始化fnlData…可能与我做的重复:fnlDataTMP=new LinkedListfnlData;但同样的问题…假设您正在处理列表中的列表,您必须遍历它们并将它们逐个添加到fnlDataTMP列表中。字符串是不可变的,所以这不重要。我想OP想知道为什么临时列表在嵌套列表中包含相同的字符串。这不是关于字符串是否更改的问题。哦,我错过了一个列表!我这样做了:fnlDataTMP=newlinkedListfnldata;但同样的问题…假设您正在处理列表中的列表,您必须遍历它们并将它们逐个添加到fnlDataTMP列表中。字符串是不可变的,所以这不重要。我想OP想知道为什么临时列表在嵌套列表中包含相同的字符串。这不是关于字符串是否更改的问题。哦,我错过了一个列表!在我的代码中,我总是这样做:fnlData=FXCollections.observableListjdata;在我的代码中,我经常这样做:fnlData=FXCollections.observelistjdata;