为什么即使我覆盖了 hashCode() 方法,containValue 方法也返回 true?
Why the containValue method returning true even if i override the hashCode() method?
嗨,即使在这里,如果我在下面的代码中注释掉覆盖的哈希码方法,即使哈希码不同,containValue 方法的输出也是正确的,请帮助解决这个问题。我重写了 equals 方法,但面临 containValue 函数的问题。
import java.util.*;
class Test{
int i;
Test(int i)
{
this.i=i;
}
public boolean equals(Object t)//overriding equals class
{
if(this.i==((Test)t).i){
return true;
}
else{
return false;
}
}
/*public int hashCode() { //overriding the hashcode method
int result = 17;
result = 37*result + Integer.toString(i).hashCode();
result = 37*result;
return result;
}*/
}
class TestCollection13{
public static void main(String args[]){
HashMap<Integer,Test> hm=new HashMap<Integer,Test>();
hm.put(1,new Test(1));
hm.put(2,new Test(2));
hm.put(3,new Test(1));
hm.put(4,new Test(4));
for(Map.Entry m:hm.entrySet()){
Test t2=(Test)m.getValue();
System.out.println(m.getKey()+" "+t2.hashCode());
}
System.out.println(hm.containsValue(new Test(1)));
}
}
哈希映射仅使用哈希码来高效查找键。当你要求地图找到一个 value 时,它基本上必须遍历它的所有条目,此时使用 hashCode()
没有意义,所以它只是调用 equals
.
如果您以相反的方式尝试地图,使用 Test
作为键而不是值,那么 将不会 在不覆盖 [=13= 的情况下工作].
嗨,即使在这里,如果我在下面的代码中注释掉覆盖的哈希码方法,即使哈希码不同,containValue 方法的输出也是正确的,请帮助解决这个问题。我重写了 equals 方法,但面临 containValue 函数的问题。
import java.util.*;
class Test{
int i;
Test(int i)
{
this.i=i;
}
public boolean equals(Object t)//overriding equals class
{
if(this.i==((Test)t).i){
return true;
}
else{
return false;
}
}
/*public int hashCode() { //overriding the hashcode method
int result = 17;
result = 37*result + Integer.toString(i).hashCode();
result = 37*result;
return result;
}*/
}
class TestCollection13{
public static void main(String args[]){
HashMap<Integer,Test> hm=new HashMap<Integer,Test>();
hm.put(1,new Test(1));
hm.put(2,new Test(2));
hm.put(3,new Test(1));
hm.put(4,new Test(4));
for(Map.Entry m:hm.entrySet()){
Test t2=(Test)m.getValue();
System.out.println(m.getKey()+" "+t2.hashCode());
}
System.out.println(hm.containsValue(new Test(1)));
}
}
哈希映射仅使用哈希码来高效查找键。当你要求地图找到一个 value 时,它基本上必须遍历它的所有条目,此时使用 hashCode()
没有意义,所以它只是调用 equals
.
如果您以相反的方式尝试地图,使用 Test
作为键而不是值,那么 将不会 在不覆盖 [=13= 的情况下工作].