java - 为什么我可以从具有不同对象的 HashMap 中检索值?

标签 java hashmap

我用 eidename 写了一个 Employee 类,用 setter 和 getter 覆盖了 equals()hashcode()

现在我编写了另一个类 HashMapTest,我在其中创建了三个 Employee 对象。我将其中两个添加到 HashMap 中,第三个与第一个员工对象相同。

我的 HashMapTest 类如下:

public class HashMapTest {
    public static void main(String[] args) {
        Employee e1 = new Employee();
        e1.setEid(1);
        e1.setEname("Ganesh");

        Employee e2 = new Employee();
        e2.setEid(1);
        e2.setEname("Mahesh");

        Map<Employee, String> map = new HashMap<Employee, String>();
        map.put(e1, "Software Developer");
        map.put(e2, "Software Test Engineer");

        Employee e3 = new Employee();
        e3.setEid(1);
        e3.setEname("Ganesh");

        System.out.println("Getting employee e3 details " + map.get(e3));
    }
}

我没有将 e3 添加到 HashMap,但我仍然从 HashMap 中获取它。

请解释这背后的逻辑。

最佳答案

逻辑是 Map 为您提供相同键的相同值。您的 e3e1 完全相同(从 map 的角度来看,因为您已经覆盖了 equals()hashcode() ),并且您确实添加了一个 String 并将 e1 作为映射中的键。

关于java - 为什么我可以从具有不同对象的 HashMap 中检索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21661983/

相关文章:

java - Android 图标有时打开新应用程序有时会显示旧应用程序,求助!

Java - 随机数生成器中的缺陷

java - 我应该使用哪种数据结构?

java - JCache 的 Spymemcached 的完全限定名称

java - 如何让我的游戏变慢(降低 FPS)?

java - 适用于 Android 的 OpenCV : Illegal Forward Reference

java - 如何将 Google Checkout 与 Google AppEngine Java 结合使用

java - Java 8's HashMap misbehaves if the keys implement Comparable in a way that isn' t 与equals一致是不是bug?

javascript - 使用两个哈希表来识别 JavaScript 中的相似之处

jsf - EL中通过动态key获取HashMap值