Java中如何让方法每次调用生成独立ArrayList以实现ArrayList嵌套
解决方法:确保每次调用生成独立ArrayList并实现嵌套存储
嘿,别担心,你的思路其实已经走对了大半!咱们一步步来梳理清楚:
首先,你要知道:你的fileToArrayList方法每次调用时都会创建一个全新的smallerArray实例——因为你在方法内部用new ArrayList<String>()初始化它,这就天然保证了每次调用返回的都是独立的ArrayList,互相之间不会有干扰。不过你的方法现在有个致命小问题:没有返回这个创建好的列表,这就导致你没法把它加入到外层的嵌套ArrayList里。
咱们先把这个方法修正过来:
static ArrayList<String> fileToArrayList(String infoFromFile) { ArrayList<String> smallerArray = new ArrayList<String>(); if (infoFromFile != null) { String[] splitData = infoFromFile.split(":"); for (int i = 0; i < splitData.length; i++) { // 这里优化了判断逻辑,避免空指针和无效的空字符串 if (splitData[i] != null && !splitData[i].trim().isEmpty()) { smallerArray.add(splitData[i].trim()); } } } // 关键:一定要返回创建好的列表! return smallerArray; }
接下来,在你的逐行读取循环里,你需要一个嵌套的ArrayList来存储每次返回的子列表,比如ArrayList<ArrayList<String>> allQuestions = new ArrayList<>();,然后每处理一行就把返回的子列表加进去:
// 假设你已经实现了逐行读取的逻辑(比如用BufferedReader) ArrayList<ArrayList<String>> allQuestions = new ArrayList<>(); String line; while ((line = reader.readLine()) != null) { ArrayList<String> questionParts = fileToArrayList(line); // 可选:如果子列表不为空再加入,避免存进空列表占用空间 if (!questionParts.isEmpty()) { allQuestions.add(questionParts); } }
额外的小优化建议
- 原判断条件
!(splitData[i] == null) || !(splitData[i].length() == 0)有逻辑漏洞:用||的话,当splitData[i]是null时,splitData[i].length()会直接抛出空指针异常。改成&&并且先判断null、再判断trim后的空字符串,会更安全可靠。 - 可以用增强for循环简化遍历代码,可读性更好:
for (String part : splitData) { if (part != null && !part.trim().isEmpty()) { smallerArray.add(part.trim()); } }
这样操作后,每次调用fileToArrayList都会生成一个独立的ArrayList,你把它们全部加入到外层的allQuestions里,就完美实现了嵌套存储的需求啦!
内容的提问来源于stack exchange,提问作者LearningToProgram
相关产品推荐
相关产品推荐

