我怎样才能改变java类的哈希码?

时间:2013-05-14 13:43:18

标签: java hashmap

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

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()的{​​{1}}方法时,它会计算哈希码并对其应用哈希并找到存储桶并返回值。

到目前为止,这很好。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您需要覆盖hashCode和equals。 Joshua Bloch在“Effective Java”的第3章中告诉你如何正确地完成它。

您的EmpBean正在使用Object hashCode实现。如果你改变价值观,这不会改变。

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

答案 2 :(得分: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;
}