for (int i = 0;i < authvallist.size();i++)
{
group_auth=(Inter_group_auth)authvallist.get(i);

key = group_auth.getGroup_code();
if(authmap.containsKey(key)){
grouplist = authmap.get(key);
grouplist.add(group_auth);
System.out.println(grouplist.hashCode());
}else{
grouplist = new ArrayList<Inter_group_auth>();
System.out.println(grouplist.hashCode());
grouplist.add(group_auth);
authmap.put(key, grouplist);
}
}
/**---------------------对比的代码----------------
*/
for (int i = 0;i < authvallist.size();i++)
{
group_auth=(Inter_group_auth)authvallist.get(i);

key = group_auth.getGroup_code();
if(authmap.containsKey(key)){
grouplist.add(group_auth);
System.out.println(grouplist.hashCode());
}else{
grouplist = new ArrayList<Inter_group_auth>();
System.out.println(grouplist.hashCode());
grouplist.add(group_auth);
authmap.put(key, grouplist);
}
}
下面的这段代码有错吗?有什么隐患?是否简介?请大家指点指点

解决方案 »

  1.   

    grouplist = authmap.get(key);多这行代码,从你现在的程序看是根本看不出来有什么不同。不同的是上面一个是需要把具有不同key的放在不同的list里面。而后面一个则是把所有的都放在同一个list里面。
      

  2.   

    隐患 最明显的地方是 下面的代码   grouplist.add(group_auth);这行可能会空指针异常,
    看你循环外层代码怎么写的了 取决grouplist 在声明处 是否创建实例对象了。另外我觉得2组代码的意义是不一样的
    第一段代码 无论是走 if 还是 else grouplist 操作的对象改变了。
    第二段代码 可能不会变 例如 先走一次 else 下次走 if 那么grouplist 操作的是一个对象
    从我的理解你的代码是想干这么一件事:
    往 authmap 中放入 list对象  相同的key 对应的group_auth 放在相同的list对象中,
    你想象下循环3次key分别是 1 2 1 (对应group_auth:a b c)这两段代码执行结果有什么不同
    第一段:authmap key=1 list=[a,c]
                   key=2 list=[b]
    第二段:authmap key=1 list=[a]
                   key=2 list=[b,c]以上分析我觉得1是正解,2是错误的
      

  3.   

    不是把所有的都放在同一个list里面,应该是说会把不同的key的东西加到list里面,直到有不存在该map的key出现,因为这时候会new出新的list.
    谢谢了,脑袋短路了!拜谢结贴!