问题描述
- 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