map-Java中Map.containsKey的问题

问题描述

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

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

解决方案

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

时间: 2024-11-03 15:55:51

map-Java中Map.containsKey的问题的相关文章

浅谈java中Map的用法_java

public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. import javautilHashMap; import javautilMap; public class Test { public static void main(String[] args) { Map map = new HashMap();//声明一个Map mapput("s", "哈哈");//向map中放

JS自定义对象实现Java中Map对象功能的方法

这篇文章主要介绍了JS自定义对象实现Java中Map对象功能的方法,可实现类似Java中Map对象增删改查等功能,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容! 这里Key

java中map为什么不能直接使用iterator遍历?

问题描述 java中map为什么不能直接使用iterator遍历? 求教大神:直接使用map的时候方法中不会显示iterator方法,而是要写Set set = map.keySet();才可以使用iterator方法,为什么map和set同为集合,map就不可以直接使用iterator方法?内部逻辑是什么? 解决方案 只有实现的collection集合才有iterator方法,比如List和se接口:而Map接口不能使用iterator方法,需要现获取set视图,即Set set = map.

JS自定义对象实现Java中Map对象功能的方法_javascript技巧

本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容!   这里Key,你要使用String类型,和Java一样,你可以进行一些增加,删除,修改,获得的操作. 使用很简单,我先把工具类给大家看下: 复制代码 代码如下: /**  *

c++-关于java中Map添加数据的问题

问题描述 关于java中Map添加数据的问题 我定义了Map revmap=new HashMap(); 但是当我向revmap中添加数据时总提示错误. revmap.put(num_vertices, p); 其中num_vertices是int型,p是Point2d型,错误提示让把num_vertices改为integer型是怎么回事? 补充内容: 其实我是看到了一个C++程序,需要把它该写为java程序,C++代码所用的数据结构如下: std::map<int, int> Map; st

关于在java中map取值问题

问题描述 关于在java中map取值问题 Map,其中object为ArrayList,如何取值 解决方案 ArrayList al = (ArrayList)ordersMap.get("rows"); 解决方案二: 谢谢各位的回答,跟一楼说的一样,我已经把值取出来了 解决方案三: 一楼正解,强制转型即可. 解决方案四: map以key.value形式存在,你直接通过key获取value就可以了

Java中Map的排序问题详解_java

Map的种类 在Java中,Map的主要作用是存储键值对.由于是根据键得到值,所以不允许键重复.它主要有如下几个类别: HashMap: 最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的.HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致.如果需要同步,可以用Collections的sy

Java 中Map 的用法详解_java

Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collection 视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序.某些映射实现可明确保证其顺序,如 TreeMap 类:另一些映射实现则不保证顺序,如HashMap 类. 注:将可变对象用作映射键时必须格外小心.当对

关于java中Map的九大问题分析_java

通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的.下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题.0.将Map转换为List类型在java中Map接口提供了三种集合获取方式:Key set,,value set, and key-value set..它们都可以通过构造方法或者addAll()方法来转换为List类型.下面代码就说明了如何从Map中构造ArrayList: // key list List keyList = new ArrayList

Java中Map的遍历方法及性能测试_java

1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率.那么实际情况如何呢? 为了解遍历性能的真实差距,包括在遍历key+value.遍历key.遍历value等不同场景下的差异,我试着进行了一些对比测试. 2. 对比测试 一开始只进行了简单的测试,但结果却表明k