在Java中将Arraylist添加到另一个Arraylist

时间:2017-10-06 09:57:04

标签: java arraylist multidimensional-array

我在SO上多次看过这个2d Arraylist Question,但不明白为什么这对我的语言应用程序不起作用。

我有一个包含多个arraylists的arraylist(名为NULL)(每个都称为stage1entry正确显示数据库值,所以我确信其他地方的查询字符串是正确的(例如System.out.println("In switch: this is entry" + entry);

但是当我向第1阶段添加条目并尝试通过[In switch: this is entry[water, aqua, C:\Users\Username\Documents\NetBeansProjects\LanguageApp\src\Images\Categories\Food images\water.png])访问它时,我收到错误"引起:java.lang.IndexOutOfBoundsException:Index:0,Size:0"这就是我测试stage1是否为空的原因。另一个跟踪语句确认即使添加了条目,stage1也为null。

stage1.get(0).get(0)

2 个答案:

答案 0 :(得分:3)

您每次都使用单个对象,这就是为什么它会使索引超出范围异常

只需将你的arraylist放入for循环

 ArrayList<String> entry = new ArrayList<String>();

   for (int i = 0; i < 5; i++) {

      //put you code here




        ArrayList<String> entry = new ArrayList<String>();
        entry.add("sd");
        entry.add("sd");
        entry.add("sd");

       System.out.println("This is entry" + entry);
       stage1.add(entry);
       //entry.clear();


    if(stage1.size()==0){  System.out.println("Stage1 " + stage1.get(0).get(0));
    }

    else {System.out.println("IT IS NULL");}     
}

这将为您提供所需的输出。

答案 1 :(得分:2)

Java中的每个对象都是引用对象。传递函数的对象trought参数时,传递引用。如果修改方法内部或外部的对象,则将修改对象的内部和外部功能。

我建议你仔细看看这一切。

Is Java "pass-by-reference" or "pass-by-value"?

现在,为了解决您的问题,您可以重新注册entry = new ArrayList();并开始每个循环,并删除entry.clear();

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

ArrayList<String> entry = null;
int count = 0;

//words is an Observable List of all words relating to a specific category and langage 
for (Words k : words) {
    entry = new ArrayList<>();
    String eng = k.getEnglishWord();
    String trans = "";

    switch (lang) {

        case "spanish":
            trans = k.getSpanishWord();
            break;

        case "french":
            trans = k.getFrenchWord();
            break;

        case "german":
            trans = k.getGermanWord();
            break;

    }

    String pic = k.getPicture();


    entry.add(eng);
    entry.add(trans);
    entry.add(pic);

   System.out.println("This is entry" + entry);
   stage1.add(entry);
   //entry.clear();


    if(stage1.size()!=0){  System.out.println("Stage1 " + stage1.get(0).get(0));
    }

    else {System.out.println("IT IS NULL");}     
}