如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?
----答案是 可以
原因:
在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。
这里不可以重复是说equals和hashcode只要有一个不等就可以了。
一、当我们向一个set、HashMap、HashSet、HashTable集合中添加某个元素,集合会首先调用该对象的hashCode方法, 这样就可以直接定位它所存储的位置,若该处没有其他元素,则直接保存。 若该处已经有元素存在,就调用equals方法来匹配这两个元素是否相同,相同则不存,不同则散列到其他位置二、hashCode重要么? 对于List集合、数组而言,他就是一个累赘,不重要;但是对于HashMap、HashSet、HashTable而言,它变得异常重要。 |
测试代码:
package com.rainy.test;import java.util.HashSet;import java.util.Set;public class App { public static void main(String[] args) { Set set = new HashSet(); A a1 = new A(); A a2 = new A(); a1.a = "1"; a2.a = "2"; set.add(a1); set.add(a2); for (A a : set) { System.out.println(a.a); } }}class A { public String a; @Override public boolean equals(Object obj) { A obja = (A)obj; return this.a.equals(obja.a); } @Override public int hashCode() { return 1; } }
代码结果:
2
1