代码是:
Iterator<Map.Entry<PCNode,ArrayList<PCEdge>>> it=arcsMap.entrySet().iterator();
while(it.hasNext()){
 Map.Entry<PCNode,ArrayList<PCEdge>> p=it.next();
 if(p.getKey().hashCode()==list.get(0).hashCode())
 System.out.println(arcsMap.get(list.get(0))+p.getValue().toString());
}
输出结果是:
null[proteinconnection.visualization.ui.PCEdge@eb7859]
问题:
通过枚举可以发现存在与list.get(0)相对应的Entry,但直接arcsMap.get(list.get(0))返回的却是null

解决方案 »

  1.   

    可以发现存在与list.get(0)相对应的Entry ————————————————————————————————————————-
    你是不是自己 看 字符 比较的 ?List里的是对象不是简单字符串8?  map是用对象比较的, 也许 你应该重写equals 方法
      

  2.   

    要HashMap才是根据hashCode值来查找的吧
      

  3.   

    list的类型是List<PCNode>.
    我写的是一个绘制网络图的软件.
    PCNode是顶点类,PCEdge是边
    list.get(0)与put时的参数key,会是同一个实例简单的说是:
    HashMap<PCNode,ArrayList<PCEdge>> arcsMap=new HashMap<PCNode,ArrayList<PCEdge>>();
    arcsMap.put(list.get(0),new ArrayList<PCEdge>());
    arcsMap.get(list.get(0));
    返回的就是null
      

  4.   

    那你的PCNode,是不是重写了hashCode和equals方法呢?
      

  5.   

    谢谢大家,问题已解决!
    PCNode extends Ellipse2D.Double
    而Ellipse2D.Double重载了hashCode,是要据x,y,height,width算的
    我因为是网络绘图,PCNode的这四个元素已改变,故hashCode改变.解决方法是调用根类Object的hashCode()方法