for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
HashMap<String, String> map = new HashMap<String, String>();
map.put("mp3_name", mp3Info.getMp3Name());
map.put("mp3_size", mp3Info.getMp3Size());
list.add(map);
System.out.println(list.get(0));
}
mp3Infos里有两条数据
这样两次输出是一样的,都为mp3Infos里的第一个数据
若把
HashMap<String, String> map = new HashMap<String, String>();
放在for循环之前,第一次输出为mp3Infos里的第一个数据,第二次输出的是mp3Infos里的第二个数据
调试时发现,在list放第二个数据时,list里的第一个数据也变成了第二个数据
求解释~~~~~~~~~~~~~~

解决方案 »

  1.   

    原因很简单,因为你两次放入map的key值是一样的,第二次放数据时会把第一次方的数据覆盖掉,其实这时候list应该只有一条数据了,就是mp3Infos里的第二条数据。
      

  2.   

    不好意思,数据还是有两条,但是已经被覆盖了,你在for循环外面把两条数据都打印出来看看就知道了
      

  3.   

    for{
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("mp3_name", mp3Info.getMp3Name());
    map.put("mp3_size", mp3Info.getMp3Size());
    list.add(map);
    }
    每循环一次list中添加了一条记录 
    有2个数据 
    "mp3_name" -- mp3Info.getMp3Name()
    "mp3_size" -- mp3Info.getMp3Size()
    //---------------------------------------------
    HashMap<String, String> map = new HashMap<String, String>();
    for{
    map.put("mp3_name", mp3Info.getMp3Name());
    map.put("mp3_size", mp3Info.getMp3Size());
    list.add(map);
    map.clear();//清除map里已添加数据,如果没有此句,map里的数据会不断累增
    }
    楼主的这句:
    放在for循环之前,第一次输出为mp3Infos里的第一个数据,第二次输出的是mp3Infos里的第二个数据
    不太明白
    而且System.out.println(list.get(0));这句代码是否需要改一下
    HashMap<String, String> map = list.get(0);//此处 .get()中若一直为 0 ,则一直指向第一条记录
    System.out.println(map.get("mp3_name"));取出key对应的内容。
      

  4.   

    键一样不是会覆盖之前的值么?
    已经解决了,list.add加入了map的内存地址,不new的话会在list加入两条数据,同一个内存地址
    O(∩_∩)O谢谢