此代码根据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
答案 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