我试图填充一个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。请帮忙!!!我花了很多时间在这上面,但无法弄清楚我的代码有什么问题。祝福你们!
答案 0 :(得分:3)
在List
中插入对象时,实际对象将插入列表中。它没有被复制。如果对同一对象执行进一步操作,则会影响列表中存储的对象。
您需要做的是为人口代码的外部循环的每次迭代创建一个新的ArrayList对象。
do {
//subAL.clear();
subAl = new ArrayList<String>();
答案 1 :(得分:1)
在ArrayList<String> subAL = new ArrayList<>();
循环
do while