java se-HashMap存入数据时,定义了equals方法,为什么还是会有相同的数据输出?

问题描述

HashMap存入数据时,定义了equals方法,为什么还是会有相同的数据输出?
HashMap<Dog,String> map=new HashMap<Dog,String>();
    map.put(new Dog("博美",23), "xyy");
    map.put(new Dog("hhh",23), "hlh");
    这是HashMap的代码,在Dog类中,实现了equals方法和hashcode()方法,如下:
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + getAge();
    result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
    return result;
}
@Override
public boolean equals(Object obj) {
    Animal other = (Animal) obj;
    if (getAge() == other.getAge())
        return true;
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;

    if (getName() == null) {
        if (other.getName() != null)
            return false;
    } else if (!(getName()).equals(other.getName()))
        return false;
    return true;
}
这里可以看到,当两个Dog类的age相同时,应当代表是相同的,不放入hashmap中,为什么最后输出结果后HashMap依然有两个元素?求大神解答。。

解决方案

还要重写hashcode。

解决方案二:

equals()方法里的getAge()这样的方法前面加上this试试

解决方案三:

equals()方法里的getAge()这样的方法前面加上this试试

解决方案四:

HashMap是根据你的key的hashcode去散列位置的,不是equal..

解决方案五:

hashcode重写

解决方案六:

 楼主你混淆了!对于Dog对象而言,重写了equals于是年龄相同的是同一个对象,但是对于hashMap而言,内部依然会先调用hashCode()找到hash值,然后调用equals()

方法比较。你重写的是对象的equals方法!!

解决方案七:

 楼主你混淆了!对于Dog对象而言,重写了equals于是年龄相同的是同一个对象,但是对于hashMap而言,内部依然会先调用hashCode()找到hash值,然后调用equals()

方法比较。你重写的是对象的equals方法!!

解决方案八:

 楼主你混淆了!对于Dog对象而言,重写了equals于是年龄相同的是同一个对象,但是对于hashMap而言,内部依然会先调用hashCode()找到hash值,然后调用equals()方法比较。你重写的是对象的equals方法!!

解决方案九:

好久不用我说错了,这个代码没啥问题,我运行了一下!

解决方案十:

好久不用我说错了,这个代码没啥问题,我运行了一下!

时间: 2024-09-13 00:55:07

java se-HashMap存入数据时,定义了equals方法,为什么还是会有相同的数据输出?的相关文章

php post大量数据时发现数据丢失问题解决方法

  这篇文章主要介绍了php post大量数据时发现数据丢失问题解决方法,原因是默认配置里的数据量配置太小造成的这个问题,修改一下配置即可,需要的朋友可以参考下 解决办法: 在php.ini中将max_input_vars调大改为5000就可以了 原因追查: from的enctype="multipart/form-data" php版本5.6.6 问题:部分POST数据接收不到 追源代码发现是php中max_input_vars配置造成的; 相关函数为rfc1867_post_han

Python基于scrapy采集数据时使用代理服务器的方法_python

本文实例讲述了Python基于scrapy采集数据时使用代理服务器的方法.分享给大家供大家参考.具体如下: # To authenticate the proxy, #you must set the Proxy-Authorization header. #You *cannot* use the form http://user:pass@proxy:port #in request.meta['proxy'] import base64 proxy_ip_port = "123.456.7

fullcalendar点击prve或者next按钮翻月时,调用什么方法事件重新绑定下一月的数据

问题描述 fullcalendar点击prve或者next按钮翻月时,调用什么方法事件重新绑定下一月的数据 解决方案 解决方案二:无人问津?有没有搞错,没人用么解决方案三:你的sql写好后,他有个自己的事件,调用一下就可以jQuery("#calendar").fullCalendar('refetchEvents');//重新加载此页面解决方案四:楼主怎么解决的.能分享下吗解决方案五:events:function(start,end,callback){$.ajax({type:&

SQL插入数据时返回最新ID方法

SQL插入数据时返回最新ID方法 SELECT LAST_INSERT_ID().SELECT @@IDENTITY接可.但到下午那兄弟还没搞定.因为不知道怎么运行..项目都是三层的.基本是写在DBHELPER中.原因是其写入了: cmd.ExecuteNonQuery(); ---这是执行非查询语句返回受影响的行数. 其实是应该写入: cmd.ExecuteScalar(); 返回首行首列.可能是因为helper里面注释为:        /// <summary>         ///

Java出现HashMap的死循环的原因及解决方法

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环.这个事情我4.5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题.但是,我发现近几年,很多人都经历过这个事(在网上查"HashMap Infinite Loop"可以看到很多人都在说这个事)所以,觉得这个是个普遍问题,需要写篇疫苗文章说一下这个事,

实现删除主表数据时, 判断与之关联的外键表是否有数据

问题描述:某个基础信息表,与系统中30多个表存在外键关系,当删除基础数据时,需要判断是否已经被用过,如果用过则更改标志位,如果没有用过则直接删除,如何能很好实现这个处理?最好能够自动适应表的变化 问题解决(SQL Server 2005)-- SQL Server 2005的错误处理容易控制, 因此, SQL Server 2005中可以直接删除, 通过错误处理来确定是否需要更新. -- 示例如下.USE tempdbGO CREATE TABLE m(    id int PRIMARY KE

Java中URL传中文时乱码的解决方法_java

前言 Java中URL传中文时乱码的问题相信不少朋友都遇到过,最近就遇到一个问题,就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.getParameter取出是出现乱码的问题. 解决办法 1.对要进行URL传递的中文字符进行编码: String message = java.net.URLEncoder.encode("中文字符","utf-8"); 2.在取URL传递中文的页面对字符进行解码: S

大数据与机器学习:实践方法与行业案例.2.2 数据缓冲区

2.2 数据缓冲区 数据缓冲区是处于生产环境和分析环境之间的中间区域,它是数据闭环中各个系统间的数据中转站,从各个系统接收原始数据,并将其暂存在对应的目录中.其他系统可以从数据缓冲区中获取需要的数据文件. 为了便于管理和迁移数据,我们规定存入数据缓冲区中的数据使用文本文件的格式,这样一来,数据缓冲区就可以使用一台或几台文件服务器实现.几乎所有的应用系统都支持文本文件的数据交互,新的系统可以轻松加入数据闭环之中. 数据缓冲区的一端连接生产环境中的大量应用系统,另一端连接分析环境中的数据平台,避免了

大数据与机器学习:实践方法与行业案例.2.1 数据闭环

第2章 数 据 体 系 迟序之数,非出神怪,有形可检,有数可推.事类相推,各有攸归,故枝条虽分而同本干知,发其一端而已.又所析理以辞,解体用图,庶亦约而能周,通而不黩,览之者思过半矣. -刘徽<九章算术注> 管理就是决策. -赫伯特·西蒙 数据存在于生产环境.数据缓冲区以及分析环境的各个节点中,并且由各种技术手段支撑着数据的存储和计算.通常,在企业中,生产环境由开发部门负责,而分析环境和数据缓冲区则由数据部门负责,物理环境分离以及管理上的隔离会让人们产生一种错觉:数据是数据部门的事情,应用系统