当前位置: 代码迷 >> Android >> 为什么ArrayList的add函数不仅增加一个数据,还把先前加的记录都改为和新加的数据?解决方法
  详细解决方案

为什么ArrayList的add函数不仅增加一个数据,还把先前加的记录都改为和新加的数据?解决方法

热度:46   发布时间:2016-05-01 21:53:17.0
为什么ArrayList的add函数不仅增加一个数据,还把先前加的记录都改为和新加的数据?
有个让我头大的问题,请朋友帮忙看一下,万分感谢!

我用查询数据库,将查询结果用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了,。这样很耗内存的,链表小的话,上面的大大已经给出解决方法了
  相关解决方案