gpt4 book ai didi

Java:将一个列表添加到另一个列表而不复制引用

转载 作者:行者123 更新时间:2023-12-02 01:18:36 25 4
gpt4 key购买 nike

我想从 csv 中读取每一行作为子列表,并将这样的子列表添加到主列表中。

enter image description here

所以它会是这样的:

[[第 1 行][第 2 行]....[最后一行]]

如何确保master_list中添加的sub_list不会受到原sub_list变化的影响。我知道这与浅复制和深复制有关。正确的做法是什么。这样做的原因是因为我可能会在其他地方使用子列表进行其他不同的操作。一旦我需要这样做,我需要将其中的内容清除为空列表。因此,我想对不同的任务使用相同的列表。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CSVReader {

public static void main(String[] args) {

String csvFile = "E:\\country.csv";
String line = "";
String cvsSplitBy = ",";
List<String> sub = new ArrayList<String>();
List<List> master = new ArrayList<List>();

try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {

while ((line = br.readLine()) != null) {

// use comma as separator
String[] country = line.split(cvsSplitBy);
sub.add(line);
master.add(sub);
// System.out.println(sub);
sub.remove(0);

// System.out.println("Country [code= " + country[4] + " , name=" + country[5] + "]");

}

} catch (IOException e) {
e.printStackTrace();
}

System.out.println(master);

}

}

这会打印出空列表“[]”。

最佳答案

两点:-

1 - 如下更改您的主列表。您不应该创建通用列表(原始类型)。如果您将列表创建为原始类型,您将能够输入任何数据类型。由于可能存在多种数据类型列表,这会产生问题。

2 - 当您进入 while 循环时,创建/分配新引用到子列表,然后将其添加到主列表。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CSVReader {

public static void main(String[] args) {

String csvFile = "E:\\country.csv";
String line = "";
String cvsSplitBy = ",";
List<String> sub = new ArrayList<String>();
List<List<String>> master = new ArrayList<>();

try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {

while ((line = br.readLine()) != null) {

// use comma as separator
String[] country = line.split(cvsSplitBy);
sub = new ArrayList<String>();
sub.add(line);
master.add(new ArrayList<String>(sub));
// System.out.println(sub);
sub.remove(0);

// System.out.println("Country [code= " + country[4] + " , name=" + country[5] + "]");

}

} catch (IOException e) {
e.printStackTrace();
}

System.out.println(master);

}

}

关于Java:将一个列表添加到另一个列表而不复制引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152850/

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