小小蜗牛爬码山 2013-11-20 08:43 采纳率: 100%
浏览 6771
已采纳

Java中Map.containsKey的问题

我自己实现了一个类
class Method{
String className,methodName;
Vector parameterTypes;
}
并把Method作为键值,写了一个Map
然后我在遍历输出这个Map的所有Key时候,能够输出我想要的那个对象a的内容,可是我写Map.containsKey(a)的时候,它却返回了false。
我尝试过自己改写Object.equals方法,但还是没用。
改写的equals方法如下:

public boolean equals(Object anotherMethod){
    if(!(anotherMethod instanceof Method))
        return false;
    Method another = (Method)anotherMethod;
    if(! this.className.equals(another.className))
        return false;
    if(! this.methodName.equals(another.methodName))
        return false;
    if(this.parameterTypes == null && another.parameterTypes != null)
        return false;
    if(this.parameterTypes != null && another.parameterTypes == null)
        return false;
    if(this.parameterTypes.size() != another.parameterTypes.size())
        return false;
    for(int i=0; i<this.parameterTypes.size(); i++){
        if(!this.parameterTypes.elementAt(i).equals(another.parameterTypes.elementAt(i)))
            return false;
    }
    return true;
}

另外,我尝试了如下代码:

methodMap.put(method, methodList.size());//methodList.size()是一个int
System.out.println(methodMap.containsKey(method));//输出true
System.out.println(methodMap.containsKey(new Method(method)));//输出false
System.out.println(method.equals(new Method(method)));//输出true

请问这是什么原因,应该如何解决?

  • 写回答

1条回答 默认 最新

  • 小小蜗牛爬码山 2013-11-20 13:14
    关注

    解决了,用hashmap的时候应该重写hashCode方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀