class Employee
{
private String name;
private int age;
private int empid;
public Employee(String name, int age, int empid)
{
super();
this.name = name;
this.age = age;
this.empid = empid;
}
}
如何修改上面的类,以便它可以用作HashMap中的键
答案 0 :(得分:4)
对于要用作hashmap中的键的类,基本上需要完成三件事。首先使类不可变,第二个覆盖hashCode方法,第三个覆盖equals方法。
使类不可变。以下是一些不可变性的规则:
了解有关从本教程创建不可变类的详细信息:
要了解重写hashCode和equals方法,请按以下步骤操作:
http://javarevisited.blogspot.in/2011/02/how-to-write-equals-method-in-java.html
答案 1 :(得分:0)
它已经可以在hashmap中使用。 所有 Java对象都有hashCode
和equals
方法,这是哈希映射工作所必需的。
Map<Employee, Whatever> theMap = new HashMap<Employee, Whatever>();
答案 2 :(得分:0)
为了将类用作有效的哈希映射键,该类应覆盖equals
和hashCode
。 hashCode
变量返回一个int,用于计算此特定对象的低级查找索引。
让类不可变也是一个好主意,就好像hashCode在程序中间更改你的密钥现在是无用的。
答案 3 :(得分:0)
你没有做任何事情。所有类都扩展了Object类。由于方法hashcode()
和equals()
是在Object类中定义的,因此任何类都可以用作键。
但是,如果您真的将类作为HashMap键使用,则应该覆盖这两种方法。
如果您使用Eclipse作为IDE,它可以为您生成这两种功能 只需在源代码中的任何位置执行Richt-Click - &gt; 来源 - &gt; 生成Hashcode()和equals()。
答案 4 :(得分:0)
在HashMap中将自定义类作为键的充分条件。
1. Override equals and Hashcode - good practice.
Read Item 8 and Item 9 from Effective Java (must Read) for
the general contract among them.
2. Try to make your Class Immutable. Atleast
those fields should be final/immutable on which your hashcode
and equals depend. So that you hashcode/equals in dosen't fail later
in your program
如果您认为只想检查引用上的相等性(不推荐),请使用IdentityHashMap。