【发布时间】:2015-07-04 06:11:41
【问题描述】:
考虑程序的一部分:-
HashMap<Object,Object> m1=new HashMap<Object,Object>();
Person p1=new Person("Raj","Sharma");
Person p2=new Person("Raj","Sharma");
m1.put(p1,"11");
m1.put(p2,"22");
Person 类也重写了 hashCode() 方法,但没有 equals() 方法
我所知道的是:由于两者具有相同的键(p1 和 p2 产生相同的哈希码),因此它们对应于相同的索引,因此在将 p1 存储在该索引中之后,当它尝试放入 p2 JVM 时,会看到两者具有相同的 hashCode ,因此再次在 p2 上进行散列并生成新索引,并将 22 存储在该索引上。
现在,如果我们尝试使用键 p1 或 p2 检索元素,
String temp=(String)m1.get(p1); // 11
它只会返回 11,然后我们如何检索元素 22??
【问题讨论】:
-
P1 被 p2 替换。所以当你为此获得价值时。这将是放入地图中的最新值
-
person 类中没有 equals 方法,因此 p1 和 p2 键将获得不同的索引...