ArrayList <arraylist <string>&gt; </arraylist <string>的问题

时间:2012-05-05 19:39:11

标签: java arraylist

此代码根据trutheality的建议进行了编辑。

我无法想出这个好头衔 - 如果你有更好的主意,请随时改变它。

我正在创建一个二维ArrayList。为此,我填写ArrayList<String>,然后将其添加到ArrayList<ArrayList<String>>。我在循环中这样做,我希望每次都能得到一个新的ArrayList<String>。这不会发生,ArrayList<ArrayList<String>>会被ArrayList<String>累积填满,因为每次填写ArrayList<String>时,它只会添加已有的内容。< / p>

ArrayList<String> oneD = new ArrayList<String>(); 
ArrayList<ArrayList<String>> twoD= new ArrayList<ArrayList<String>>();

Cursor tSCursor = retrieveTS(tId);  
tSCursor.moveToFirst();

for (int i = 0; i < tSCursor.getCount(); i++) 
    {
        stockId = tSCursor.getString(tSCursor.getColumnIndex("_id"));

        oneD.add(sId);

        oneD.addAll(retrieveSFinParams(sId));

        twoD.add(sFinParams);           

        tSCursor.moveToNext();
    }

我尝试过sFinParams.clear()但是当Java用户在容器中引用时,当我使用clear()时,我也松开了2D ArrayList中的值。

我怎样才能每次都获得一个新的ArrayList所以当我填满2D ArrayList时我不会复制1D ArrayList的内容?

我感谢任何帮助, d

2 个答案:

答案 0 :(得分:3)

您必须在循环的每次迭代中创建一个新的ArrayList实例。否则,您将继续向同一内部列表添加元素,并将此唯一内部列表多次添加到外部列表中。

答案 1 :(得分:2)

我想你的代码实际上是

ArrayList<String> oneD = new ArrayList<String>(); 
ArrayList<ArrayList<String>> twoD= new ArrayList<ArrayList<String>>();

Cursor tSCursor = retrieveTS(tId);  
tSCursor.moveToFirst();

for (int i = 0; i < tSCursor.getCount(); i++) 
{
    stockId = tSCursor.getString(tSCursor.getColumnIndex("_id"));

    oneD.add(sId);

    oneD.addAll(retrieveSFinParams(sId));

    twoD.add(oneD);          

    tSCursor.moveToNext();
}

问题是您要反复向oneD添加相同的对象(twoD),而不是为{{1}中的每个条目创建新的oneD ArrayList }}。修复只是:在循环中创建twoD ,以便每次迭代都使用不同的oneD

oneD