在HashMap中找不到自定义对象?

pra*_*kar 1 java hashcode

嗨,我正在尝试学习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"))); 返回假?

Ern*_*ill 7

你的equals()方法是错误的,这打破了HashMap.争论equals()始终是一个Object; 你必须检查Object它是什么类型并将其投射在方法的主体中.

hashCode()值用于将对象排序为类别,但equals()用于确定两个对象实际上是否相同.您需要正确定义这两种方法才能开始HashMap工作.