Java 如何填充包含另一个ArrayList

Java 如何填充包含另一个ArrayList,java,android,arraylist,Java,Android,Arraylist,我试图填充一个arraylist以包含另一个arraylist,但在第一轮循环中将子arraylist添加到父级后,在下一轮循环中,它将覆盖先前添加的行并复制第二轮的值,依此类推;最后我得到了一个arraylist,它有重复的行,所有这些行的值都位于光标的最后一行。为了更好地澄清它。。。而不是退回这样的东西 [Quote1, Location1] [Quote2, Location2] [Quote3, Location3] [Quote4

我试图填充一个arraylist以包含另一个arraylist,但在第一轮循环中将子arraylist添加到父级后,在下一轮循环中,它将覆盖先前添加的行并复制第二轮的值,依此类推;最后我得到了一个arraylist,它有重复的行,所有这些行的值都位于光标的最后一行。为了更好地澄清它。。。而不是退回这样的东西

       [Quote1, Location1]
       [Quote2, Location2]
       [Quote3, Location3]
       [Quote4, Location4]
它返回类似于

       [Quote4, Location4]
       [Quote4, Location4]
       [Quote4, Location4]
       [Quote4, Location4]
这是我的密码:

public ArrayList<ArrayList<String>> getAllVerses() {
    ArrayList<ArrayList<String>> allVersesAL = new ArrayList<ArrayList<String>>();
    ArrayList<String> subAL = new ArrayList<>();
    Cursor allVerse = getAllQuote(); //It's an outsider method
    allVerse.moveToFirst();
    do {
        //subAL.clear();
        subAL.add(allVerse.getString(allVerse.getColumnIndex(VERSE)));
        subAL.add(allVerse.getString(allVerse.getColumnIndex(LOC_AUTH)));
        Log.d("Content of subAL", subAL + "");
        allVersesAL.add(subAL);
    } while (allVerse.moveToNext());

    for (List<String> li : allVersesAL) {
        for (String s : li) {
            Log.d("getAllVerses", "Inside the second for loop...");
            Log.d("Testing arraylist...", s + " : ");
        }
    }
    return allVersesAL;
}

它从游标对象将数据指定给子ArrayList。请帮忙!!!我花了很多时间在这上面,但无法找出我的代码出了什么问题。祝福你们

Move ArrayList subAL=新建ArrayList;在do while循环中

在列表中插入对象时,实际对象将插入列表中。它没有被复制。如果对同一对象执行进一步操作,将影响列表中存储的对象

您需要做的是为填充代码外部循环的每次迭代创建一个新的ArrayList对象

do {
    //subAL.clear();
    subAl = new ArrayList<String>();

您似乎在向封闭列表allVersesAL添加对同一列表subAl的大量引用。相反,每次都要创建一个新的内部列表;可能会解决你的问题problem@ShaishavJogani不会的。如果他这样做,列表将只包含光标中最后一行的数据。@KlasLindbäck我不这么认为。将subAl添加到allVersesAL后,清除它并再次添加新值并没有什么害处。这与创建的新实例相同subAl@ShaishavJogani插入不会创建对象的副本。如果在添加子对象后清除它,则将清除已插入的列表,因为它是同一对象!。非常感谢你!!!我花了半天多的时间才弄明白发生了什么事……非常感谢。这帮了大忙@Sammie请接受答案,如果对你有帮助,请投票。谢谢