-2

我的疑问是,我有一个包含两个变量 id 和 name 的员工类,如下所示:

public class EmpBean {
  int id=10;;
  String name="uday";
}

我已将此对象添加到 HashMap 中,如下所示:

HashMap<EmpBean, EmpBean> hashMap= new HashMap<EmpBean, EmpBean>();
hashMap.put(empBean, empBean);

然后:System.out.println(hashMap.get(empBean).id);

输出:10;

当我调用 的get()方法时hashMap,它会计算哈希码并对其应用哈希并找到存储桶并返回值。

到目前为止,这很好。

如果我想在调用 get() 方法之前更改对象的哈希码。我能怎么做 ?我试过empBean.id=2000; 但哈希码没有变化。

4

3 回答 3

2

如果您更改对象中的值,则在 HashMap 中,您必须首先从 HashMap 中删除项目,然后编辑值,然后再次插入 HashMap。

于 2013-05-14T13:47:07.543 回答
1

您需要覆盖 hashCode 和 equals。Joshua Bloch 在“Effective Java”的第 3 章中告诉你如何正确地做到这一点。

您的 EmpBean 正在使用 Object hashCode 实现。如果您更改值,那将不会改变。

在调用 get 方法之前,您不应该更改哈希码。

于 2013-05-14T13:45:57.117 回答
0

这将是 eclipse 生成的 hashCode 方法:

@Override
public int hashCode()
{
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}
于 2013-05-14T13:48:47.770 回答