如何创建多个列表的arraylist java

如何创建多个列表的arraylist java,java,arrays,arraylist,Java,Arrays,Arraylist,经过几年的休息后,我又开始用java编程了,现在我正在尝试刷新一下,但我似乎正在努力创建一个列表列表,而不是多维列表。例如,我只是将所有列表转储到一个变量中,如果我需要列表x,我将获取列表x并将其分配给一个变量,以便于访问,而不是通过第二维变量循环 这就是我目前拥有的: package src.handlers; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; impor

经过几年的休息后,我又开始用java编程了,现在我正在尝试刷新一下,但我似乎正在努力创建一个列表列表,而不是多维列表。例如,我只是将所有列表转储到一个变量中,如果我需要列表x,我将获取列表x并将其分配给一个变量,以便于访问,而不是通过第二维变量循环

这就是我目前拥有的:

package src.handlers;

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


public class TextManager {
    public static void load_chapters(){
        ArrayList sections = new ArrayList();
        sections.add(read_lines("src\\chapters\\0.intro.txt"));
        sections.add(read_lines("src\\chapters\\1.hello_world.txt"));
        sections.add(read_lines("src\\chapters\\2.comments.txt"));
        sections.add(read_lines("src\\chapters\\3.variabelen.txt"));
        sections.add(read_lines("src\\chapters\\4.operators.txt"));    

        for(int x=0; x < sections.size(); x++){
            // what i attempt to do ->
            Object current_section = sections.get(x); // This gives object conversion error when assigning as List<String>
            // loop here that loops all lines  in current section.
            // cannot access  cause get function says its an object not a list?
            System.out.println(current_section.get(3));
        }
    }


    public static List<String> read_lines(String filename){
        List<String> output = new ArrayList<String>();
        // Probeer het bestand in  te lezen.
        try { // Maak buffereader aan voor het inlezen met filereader module.
            BufferedReader read = new BufferedReader(new FileReader(filename));
            String cur_line;
            // zolang er een nieuwe lijn word gevonden en deze niet null is -> output toevoegen aan output variabel.
            while((cur_line = read.readLine()) != null){
                output.add(cur_line);
            } // Sluiten  van buffer reader voor exceptions te voorkomen / latere toegang mogelijk te maken.
            read.close();
            return output; //terugave vanalle file output.
        }

        catch(Exception e)
        {
            System.err.format("Exeption occured trying to read from '%s'.", filename);
            e.printStackTrace();
            return null;
        }
    }
}

包src.handlers;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.List;
公共类文本管理器{
公共静态空荷载(章){
ArrayList节=新的ArrayList();
添加(读_行(“src\\chapters\\0.intro.txt”);
添加(读_行(“src\\chapters\\1.hello_world.txt”);
添加(读_行(“src\\chapters\\2.comments.txt”);
添加(读_行(“src\\chapters\\3.variabelen.txt”);
添加(读_行(“src\\chapters\\4.operators.txt”);
对于(int x=0;x
Object current_section=sections.get(x);//分配为列表时会出现对象转换错误
//循环当前节中的所有行。
//无法访问,因为get函数说它是对象而不是列表?
System.out.println(当前_节get(3));
}
}
公共静态列表读取行(字符串文件名){
列表输出=新的ArrayList();
//可能是在莱森。
请尝试{//Maak buffereader aan voor het inlezen met文件读取器模块。
BufferedReader read=新的BufferedReader(新文件读取器(文件名));
串电流;
//zolang er een nieuwe lijn单词gevonden deze niet null是->输出到输出变量。
而((cur_line=read.readLine())!=null){
输出。添加(当前行);
}//Sluiten van缓冲区读取器voor异常te voorkomen/latere toegang mogelijk te maken。
read.close();
返回输出;//terugavanalle文件输出。
}
捕获(例外e)
{
System.err.format(“尝试从“%s”读取时发生了异常”,文件名);
e、 printStackTrace();
返回null;
}
}
}
收到了,谢谢,亚历克斯:D

    public static void load_chapters(){
        ArrayList<List<String>> sections = new ArrayList();
        sections.add(read_lines("src\\chapters\\0.intro.txt"));
        sections.add(read_lines("src\\chapters\\1.hello_world.txt"));
        sections.add(read_lines("src\\chapters\\2.comments.txt"));
        sections.add(read_lines("src\\chapters\\3.variabelen.txt"));
        sections.add(read_lines("src\\chapters\\4.operators.txt"));    

        for(List<String> section : sections){
            for(String line : section){
                System.out.println(line);
            }
        }
    }
public static void load_chapters(){
ArrayList节=新的ArrayList();
添加(读_行(“src\\chapters\\0.intro.txt”);
添加(读_行(“src\\chapters\\1.hello_world.txt”);
添加(读_行(“src\\chapters\\2.comments.txt”);
添加(读_行(“src\\chapters\\3.variabelen.txt”);
添加(读_行(“src\\chapters\\4.operators.txt”);
用于(列表部分:部分){
用于(字符串行:节){
系统输出打印项次(行);
}
}
}

要创建列表列表,只需将其初始化为:

List<List<String>> sections = new ArrayList<>();
在遍历列表时,我建议使用for each循环:

for (List<String> section : sections) {
    System.out.println(section.get(3));
}
for(列表部分:部分){
System.out.println(section.get(3));
}
但是,如果您仍然希望使用索引方法(尽管在迭代Java列表时不建议使用索引方法),下面是代码:

for (int x = 0; x < sections.size(); x++) {
    List<String> current_section = sections.get(x);
    System.out.println(current_section.get(3));
}
for(int x=0;x
与您的问题无关,但一些注释位于:

  • 变量和方法名称应为
    mixedCase
    (或
    lowerCamelCase
    • current\u节
      变量应重命名为
      currentSection
    • readLine
      loadChapters
      方法我将它们重命名为
      readLine
      loadChapters
1)我要指出的第一件事是,您使用的是原始的
ArrayList
,因为Java 1.5提供了泛型,所以您现在可以使用您想要的类中的对象,而不是铸造对象,就像您在
read_lines(String)
方法中所做的那样

ArrayList<ArrayList<String>> sections = new ArrayList<>();
// etc.
for(int x=0; x < sections.size(); x++){
    ArrayList<String> current_section = sections.get(x);
    System.out.println(current_section.get(3));
}

原始类型是这里的一个问题。。。另一个问题是,您希望能够轻松地获取列表,但如果将它们存储在
列表中,则必须知道父列表中列表的索引,或者必须检查其值。使用
Map
来实现这一点…谢谢我想要的东西:DAlso:谢谢你的迭代技巧,我的java非常生锈,我不知道你可以用这种方式更容易:)只编码了2-3年,那是10年多前信息仍然匮乏的时候。另一个离题:类不是混合/驼峰情况吗?我使用如下命名约定:_globalvar、normalvar、Class、function_name对于类,它是大写的,比如
Class MyClass
。您的类名
TextManager
正确。检查我贴的文章。通常这是Java中命名的经验法则,但是您可以使用自己喜欢的东西。
ArrayList<ArrayList<String>> sections = new ArrayList<>();
// etc.
for(int x=0; x < sections.size(); x++){
    ArrayList<String> current_section = sections.get(x);
    System.out.println(current_section.get(3));
}
List<List<String>> sections = new ArrayList<>();
// Depending on your needs you could change your List<> implementation like:
// List<List<String>> sections = new LinkedList<>();
// List<List<String>> sections = new Vector<>();
// etc.
for(int x=0; x < sections.size(); x++){
    List<String> current_section = sections.get(x);
    System.out.println(current_section.get(3));
}
for(int x=0; x < sections.size(); x++){
    ArrayList current_section = (ArrayList)sections.get(x); // CAST
    System.out.println(current_section.get(3));
}