【问题标题】:Will hashmap compares references also before comparing with equals while putting a same key in hashmap?hashmap 是否会在与 equals 进行比较之前比较引用,同时在 hashmap 中放置相同的键?
【发布时间】:2016-02-20 15:00:34
【问题描述】:

我有一个问题,我重写了 equals 方法并每次都返回 false。 如果我在hashmap中两次放置相同的对象,根据equals实现,它将返回false并且存在具有相同对象的重复条目,但它仅覆盖现有对象。那么它会在与equals比较之前比较地址引用吗?

import java.util.HashMap;
import java.util.Map;

public class MapOverrideequals {

    public MapOverrideequals(int anshu) {
        this.anshu = anshu;
    }

    int anshu;

    @Override
    public boolean equals(Object o) {

        return false;

    }

    public static void main(String[] args) {

        Map<MapOverrideequals, String> m = new HashMap<MapOverrideequals, String>();

        MapOverrideequals mm = new MapOverrideequals(1);
        MapOverrideequals mm1 = new MapOverrideequals(1);

        m.put(mm, "ji");
        m.put(mm, "ki");
        //m.put(mm1, "ansh");

        for (Map.Entry<MapOverrideequals, String> m1 : m.entrySet()) {
            System.out.println(m1.getKey().anshu + "  " + m1.getValue());
        }

    }

}

输出:1 ki

【问题讨论】:

  • 你把mm放了两次,所以最后一个条目会覆盖第一个
  • 事实上它会的。但是您对equals() 的实现违反了其contract 的反身性要求。也就是说,对于所有xx.equals(x) 必须为真。你想做什么?可能有更好的方法来解决它。
  • @StuartMarks-这只是一个面试问题,我什么都不想做:)

标签: java dictionary collections hashmap


【解决方案1】:
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 

它检查哈希和键引用是否相等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2015-01-30
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多