有个让我头大的问题,请朋友帮忙看一下,万分感谢!我用查询数据库,将查询结果用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

解决方案 »

  1.   

    我一看你题目都知道怎么回事了会C语言不?因为你添加的是指针,你两次添加的map指针都是相同的,你第二次跟第一次都指向同一个数据域,肯定一样啊,有map和list都是指针要注意了。在把while外的map的赋值语句删掉,在循环里加 
    HashMap<String,String> map = new HashMap<String,String>();
      

  2.   

    是把while外的map的变量声明语句删掉,刚说错了  
      

  3.   

    还有一个办法
     你可以在while循环上面写一句
    map.clear();
    把这个hashMap中上次保存的东西清空希望可以帮到楼主噢。 
      

  4.   

    你的问题是这样的,之前我也遇到过,要将HashMap存到ArrayList,那么每次都要去new一个HashMap才是新的对象,你不new就是用的同意所以只有最后一条数据,
    你在while里面每次都把HashMap new 出来就行了
      

  5.   

    没看你的代码  但是遇过次数很多   一般都是你对象new的地方不对
      

  6.   

    HashMap<String,String> map = new HashMap<String,String>();
    加载循环内部,每次循环式就新建一个新的对象,就不会重复了...
      

  7.   

    但是这样new不符合代码编写的优化规则...............
      

  8.   

    如果链表大话,就不要在里面new了,。这样很耗内存的,链表小的话,上面的大大已经给出解决方法了
      

  9.   

    map.clear();
    测试的结果是ArrayList中的调试结果都为空。
    如果链表大话,就不要在里面new了,。这样很耗内存的,能否指点一下不耗内存的方法?