有个让我头大的问题,请朋友帮忙看一下,万分感谢!
我用查询数据库,将查询结果用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
------解决方案--------------------
我一看你题目都知道怎么回事了
会C语言不?
因为你添加的是指针,你两次添加的map指针都是相同的,你第二次跟第一次都指向同一个数据域,肯定一样啊,有map和list都是指针要注意了。
在把while外的map的赋值语句删掉,在循环里加
HashMap<String,String> map = new HashMap<String,String>();
------解决方案--------------------
还有一个办法
你可以在while循环上面写一句
map.clear();
把这个hashMap中上次保存的东西清空
希望可以帮到楼主噢。
------解决方案--------------------
你的问题是这样的,之前我也遇到过,要将HashMap存到ArrayList,那么每次都要去new一个HashMap才是新的对象,你不new就是用的同意所以只有最后一条数据,
你在while里面每次都把HashMap new 出来就行了
------解决方案--------------------
HashMap<String,String> map = new HashMap<String,String>();
加载循环内部,每次循环式就新建一个新的对象,就不会重复了...
------解决方案--------------------
如果链表大话,就不要在里面new了,。这样很耗内存的,链表小的话,上面的大大已经给出解决方法了