我在使用map的时候键被后面的覆盖了,但是键的名字都不同!这是为什么??

解决方案 »

  1.   

    必然是键值重复了。你可以自己包装下HashMap,然后在put这里先做个检查,如果发现重复键就throw RuntimeException,帮助定位问题。
      

  2.   


    HashMap map = ...;
    Object key =...;
    Object value = ...;
    Object o = map.put(key, value);
    if (o != null)
    {
    throw new Exception("键值重复"+key);
    }
      

  3.   

    1.两个key的hashCode是不是相同
    2.使用equals比较一下两个key,是否返回true
      

  4.   

    偶认认真的检查了几遍!for (int i = 0; i < perlist.size(); i++) {
    Object[] object = (Object[]) perlist.get(i);
    if (map.containsKey(object[0])) {
    ((List<Object>) map.get(object[0])).add(object);
    } else {
    maplist=new ArrayList<Object>();
    maplist.add(object);
    map.put((String)object[0], maplist);
    }
    }
      

  5.   


    for (int i = 0; i < perlist.size(); i++) {
    Object[] object = (Object[]) perlist.get(i);
    if (map.containsKey(object[0])) {
    ((List<Object>) map.get(object[0])).add(object);
    } else {
    maplist=new ArrayList<Object>();
    maplist.add(object);
    map.put((String)object[0], maplist);
    }
    }
      

  6.   

    你有无重载过 equals 方法?如果equals方法不当,就可能导致问题。
      

  7.   

    总共只有6个对象?那么楼主方便告诉下,代码运行结果么?for (int i = 0; i < perlist.size(); i++) {
      Object[] object = (Object[]) perlist.get(i);
      System.out.println("Get: " + object[0]);
      if (map.containsKey(object[0])) {
        ((List<Object>) map.get(object[0])).add(object);
      } else {
        System.out.println("NewKey: " + object[0]);
        maplist=new ArrayList<Object>();
        maplist.add(object);
        map.put((String)object[0], maplist);
      }
    }
    System.out.println("MapSize: " + maplist.size());
      

  8.   

    参考一下这个,估计对你有用
    http://my.csdn.net/my/code/detail/2480
      

  9.   

    能把你的perlist里面的值贴出来看看吗,你那list里面应该是放的数组,而且数组似乎就第一个值能被用到了哈
      

  10.   

    maplist=new ArrayList<Object[]>();
    楼主应该这样写吧?感觉这个有问题先,其他的没仔细看。