当前位置: 首页 > 面试题库 >

Java HashMap返回值未根据我对equals和hashcode的理解进行确认

唐默
2023-03-14
问题内容

以下代码示例的输出是:

{1–e = e2,2–e1 = e1}

package com.sid.practice;

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

public class InputOutputPractice 
{

    public InputOutputPractice() 
    {

    }

    public static void main(String[] args) 
    {
        Employee e = new InputOutputPractice().new Employee(1, "e");
        Employee e1 = new InputOutputPractice().new Employee(2, "e1");
        Employee e2 = new InputOutputPractice().new Employee(1, "e2");

        Map m = new HashMap();
        m.put(e, "e");
        m.put(e1, "e1");
        m.put(e2, "e2");
        System.out.println(m);

    }

    class Employee
    {
        public Employee(int id, String name)
        {
            this.id=id;
            this.name = name;
        }

        private int id;
        private String name;

        public String getName() 
        {
            return name;
        }

        public void setName(String name) 
        {
            this.name = name;
        }

        public int getId() 
        {
            return id;
        }

        public void setId(int id) 
        {
            this.id = id;
        }

        @Override
        public boolean equals(Object obj) 
        {
            return ((Employee)obj).getId()==(this.getId());
        }

        @Override
        public int hashCode() 
        {
            return Integer.valueOf(getId()).hashCode();
        }

        @Override
        public String toString() 
        {
            return this.id + "--" + this.name;
        }
    }
}

我不明白对象如何e2能够覆盖对象中的键e,但不能覆盖值。以我的理解,输出应该是:

{1–e2 = e2,2–e1 = e1}


问题答案:

实际上,您将其倒退了。该值被覆盖。密钥没有被替换,因为就HashMape和e2而言,它们是相同的。

您的输出是{1--e=e2, 2--e1=e1}

key = e, value = "e2" (which overrode the old value "e")
key = e1, value = "e1"


 类似资料:
  • 我正在Java开发一个纸牌游戏,我试图比较hashMap中的键和ArrayList中的元素(两者都是对象)。hashCode()和equals()被重写,但出现了一个错误,我不确定它的哪一部分是错误的。 这是纸牌课 我们要做的比较 错误:点击查看错误图片

  • 根据我所读到的, 要使用对象作为hashMap的键,它必须提供正确的重写和equals和hashCode方法的实现。HashMap get(Key k)方法调用Key对象上的hashCode方法,并将返回的hashValue应用到它自己的静态哈希函数中,以找到一个桶位置(备份数组),键和值以名为Entry(Map.Entry)的嵌套类的形式存储在这里。HashMap的内部哈希方法防御质量差的哈希函

  • 我正在尝试对我的HBase数据集进行一些处理。但我对HBase和Hadoop生态系统还是个新手。 我想从这个社区得到一些反馈,看看我对HBase和它上的MapReduce操作的理解是否正确。 这里的一些背景: null 为了简化这个问题,我将以正式的行计数器实现为例,我想确认我的知识是正确的。 所以我对HBase和MapReduce的问题是: > 在RowCounter的最简单形式中(没有任何可选

  • 我像这样初始化哈希集: 我的对象(抽象类的子类)的和方法如下所示: 我甚至编写了一个简单的单元测试,它不会给出任何错误: 在我的应用程序中,我有一个方法,我只需将对象添加到: 在另一种方法中,我检查

  • 边走边学Java(Python背景)。简单的单词计数程序在Java7代码(不能用J8!)。 我有一个单词的哈希图:计数对。现在我需要按计数(递减顺序)排序,并打破按字母顺序使用word的联系。 我正在寻找对这个想法的反馈: 遍历HashMap中的映射项(me) 使用me.getkey=K和me.getvalue=v new map.entry reverse_me=(V,K){不确定此语法} 将r

  • 问题内容: 我有一张像这样的表: SQL或蜂巢中是否有一种方法可以将其转换为类似表的形式: 我不确定有没有一个词来描述这种操作…任何帮助将不胜感激! 问题答案: 这基本上是一个。您没有指定要使用的RDBMS,但是可以使用聚合函数和语句在任何数据库中获取结果: 参见带有演示的SQL Fiddle 结果: