当前位置: 首页 > 知识库问答 >
问题:

在插入到HashMap时重写equals方法以返回false

锺宜
2023-03-14
import java.util.HashMap;
import java.util.Map;

public class MapTest {
    public String id;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    @Override
    public int hashCode(){
        return 100;
    }
    @Override
    public boolean equals(Object te){
        return false;
    }
    public static void main(String[] args) {
        MapTest obj = new MapTest();
        MapTest obj1 = new MapTest();
        obj.setId("test");
        obj1.setId("test2");
        Map<MapTest,Integer> test = new HashMap<MapTest,Integer>(); 
        test.put(obj, 1000);
        test.put(obj1, 2000);
        test.put(new MapTest(), 4000);
        System.out.println(test.get(obj)); //1000
        System.out.println(test.get(obj1));//2000
        System.out.println(test.get(new MapTest()));//Null
        System.out.println(test.size());//3
    }

}

在这里,对象返回相同的hashcodes,所以为了避免在向HashMap添加数据时重写,我有一个返回false的equals方法。现在,当我使用get时,我得到了正确的数据示例obj1和obj给出了准确的值,但我的问题是,当它们的hashcode相同时,java如何区分不同的对象并从hashmap返回它们的准确值。

共有1个答案

荀辰钊
2023-03-14
if (e.hash == hash &&
   ((k = e.key) == key || (key != null && key.equals(k))))
      return e;
TestMap obj2 = new TestMap();
obj2.setId("test");
System.out.println(test.get(obj2)); // Returns Null
 类似资料:
  • 我正在Java开发一个纸牌游戏,我试图比较hashMap中的键和ArrayList中的元素(两者都是对象)。hashCode()和equals()被重写,但出现了一个错误,我不确定它的哪一部分是错误的。 这是纸牌课 我们要做的比较 错误:点击查看错误图片

  • 我一直在读关于在处理子类时如何最好地重写equals方法的文章,在这里我发现了不少帖子。他们建议使用instanceof或getClass()实现解决方案的不同方法来比较不同子类的对象。 然而,关于有效的Java,我的理解是(我对这一点还不熟悉,所以我很可能是错的!)布洛赫认为,最终两者都会有问题,“除非你愿意放弃面向对象抽象的好处,否则没有办法在保留equals契约的同时扩展一个可实例化类并添加

  • 本文向大家介绍hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?相关面试题,主要包含被问及hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?时的应答技巧和注意事项,需要的朋友参考一下 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ha

  • 问题内容: 如何覆盖对象类中的equals方法? 即我有 我想将参数obj转换为Person类型,但是如果执行(Person)obj,它将无法正常工作。 问题答案: 您可以将其强制转换为方法,只需使用的实例确保其类型正确

  • 我正在尝试创建一个有理数类并覆盖等于和哈希代码方法。但是我的等号在明显不正确的情况下又回来了,即分子和分母不同。知道是什么原因造成的吗?

  • 本文向大家介绍为什么在重写 equals方法的同时必须重写 hashcode方法,包括了为什么在重写 equals方法的同时必须重写 hashcode方法的使用技巧和注意事项,需要的朋友参考一下 我们都知道Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类。 其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。O