亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java:將一個列表添加到另一個列表而不復制引用

Java:將一個列表添加到另一個列表而不復制引用

肥皂起泡泡 2023-09-06 16:06:10
我想將從 csv 中讀取的每一行作為 sub_list 并將此類 sub_list 添加到 master_list 中。所以它會是這樣的:[[第 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);    }}這會打印出空列表“[]”。
查看完整描述

3 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

兩點:-

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);


    }


}


查看完整回答
反對 回復 2023-09-06
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

嘗試將變量聲明移到subwhile 塊上。


    String csvFile = "E:\\country.csv";

        String line = "";

        String cvsSplitBy = ",";

        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);

                List<String> sub = new ArrayList<String>();

                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);


查看完整回答
反對 回復 2023-09-06
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

你可以這樣做


public static List<String[]> getTestData(String fileName) {

    List<String[]> records = new ArrayList<String[]>();

    try {

        String record;

        BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"));

        while ((record = file.readLine()) != null) {

            System.out.println(record);

            String fields[] = record.split(",");

            records.add(fields);

        }

        file.close();

        return records;

    } catch (Exception e) {

        e.printStackTrace();

    }

    return null;

}


查看完整回答
反對 回復 2023-09-06
  • 3 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號