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