有个让我头大的问题,请朋友帮忙看一下,万分感谢!我用查询数据库,将查询结果用HashMap存入ArrayList中,在循环存储时,每个Map内的值是不同的,存两个值为A和B,结果ArrayList的值最后却变成两个都是B我以前是正常的,不知何种原因突然变成这种现象了,请高手指点!代码:
i=0;
while(cursor2.moveToNext())
{
map.put("name", cursor2.getString(cursor2.getColumnIndex("name")));
list.add(map);
Log.i(TAG,"加后实时显示 map "+i+" "+String.valueOf(map.get("name")));
Log.i(TAG,"加后实时显示 list "+0+" "+String.valueOf(((HashMap) (list.get(0))).get("name")));
i=i+1;
}
i=0;
if (list.size()>0)
{
for (i=0;i<list.size();i++)
{
Log.i(TAG,"循环显示 list"+i+" "+String.valueOf(((HashMap) (list.get(i))).get("name")));
}
}
调试结果
加后实时显示 map 0 A
加后实时显示 list 0 A
加后实时显示 map 1 B
加后实时显示 list 0 B
循环显示 list 0 B
循环显示 list 1 B
i=0;
while(cursor2.moveToNext())
{
map.put("name", cursor2.getString(cursor2.getColumnIndex("name")));
list.add(map);
Log.i(TAG,"加后实时显示 map "+i+" "+String.valueOf(map.get("name")));
Log.i(TAG,"加后实时显示 list "+0+" "+String.valueOf(((HashMap) (list.get(0))).get("name")));
i=i+1;
}
i=0;
if (list.size()>0)
{
for (i=0;i<list.size();i++)
{
Log.i(TAG,"循环显示 list"+i+" "+String.valueOf(((HashMap) (list.get(i))).get("name")));
}
}
调试结果
加后实时显示 map 0 A
加后实时显示 list 0 A
加后实时显示 map 1 B
加后实时显示 list 0 B
循环显示 list 0 B
循环显示 list 1 B
HashMap<String,String> map = new HashMap<String,String>();
你可以在while循环上面写一句
map.clear();
把这个hashMap中上次保存的东西清空希望可以帮到楼主噢。
你在while里面每次都把HashMap new 出来就行了
加载循环内部,每次循环式就新建一个新的对象,就不会重复了...
测试的结果是ArrayList中的调试结果都为空。
如果链表大话,就不要在里面new了,。这样很耗内存的,能否指点一下不耗内存的方法?