如何填充ArrayList <arraylist <string>&gt;包含另一个ArrayList <string>

时间:2016-08-26 10:22:46

标签: java android arraylist

我试图填充一个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。请帮忙!!!我花了很多时间在这上面,但无法弄清楚我的代码有什么问题。祝福你们!

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

ArrayList<String> subAL = new ArrayList<>();循环

中移动do while