嗨,我正在尝试学习hashcode()和equals()方法的目的.我尝试了以下程序.
import java.util.HashMap;
public class LearnHascode {
public String name;
public int age;
LearnHascode(String na)
{
name = na;
}
public int hashCode()
{
return name.hashCode();
}
public boolean equals(LearnHascode obj)
{
return this.name.equals(obj.name);
}
public static void main(String[] args)
{
HashMap h = new HashMap();
LearnHascode ob1 = new LearnHascode("Prabha");
LearnHascode ob2 = new LearnHascode("Prabha");
h.put(ob1, v1);
h.put(ob2, v2);
System.out.println(h);
System.(h.out.printlncontainsKey(new LearnHascode("Prabha")));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
{hash.LearnHascode@8ef7bdfc=Two, hash.LearnHascode@8ef7bdfc=one}
false
Run Code Online (Sandbox Code Playgroud)
我有两个疑问:
1)我认为HashMap将包含一个条目,因为两个对象(ob1和ob2)的hascode是相同的.任何人都可以解释为什么HashMap中有两个条目?
2)为什么System.(h.out.printlncontainsKey(new LearnHascode("Prabha"))); 返回假?
你的equals()方法是错误的,这打破了HashMap.争论equals()始终是一个Object; 你必须检查Object它是什么类型并将其投射在方法的主体中.
该hashCode()值用于将对象排序为类别,但equals()用于确定两个对象实际上是否相同.您需要正确定义这两种方法才能开始HashMap工作.
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |