如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?
如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?
----答案是 可以
原因:
在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。
这里不可以重复是说equals和hashcode只要有一个不等就可以了。
一、当我们向一个set、HashMap、HashSet、HashTable集合中添加某个元素,集合会首先调用该对象的hashCode方法, 这样就可以直接定位它所存储的位置,若该处没有其他元素,则直接保存。 二、hashCode重要么? |
测试代码:
package com.rainy.test; import java.util.HashSet; import java.util.Set; public class App { public static void main(String[] args) { Set<A> set = new HashSet<A>(); 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