【发布时间】:2014-08-01 02:24:57
【问题描述】:
理想情况下,根据定义,HashMap 不允许重复键;但我无法理解以下逻辑。
我已经定义了一个Employee 类并覆盖了equals 和hashcode 方法。
public class Employee {
private String empID;
public int hashCode() {
int result = 17;
result = 37 * result + empID.hashCode();
return result;
}
public boolean equals(Object object) {
boolean result = false;
if (object instanceof Employee) {
Employee employee = (Employee) object;
result = (this.empID.equalsIgnoreCase(employee.getEmpID()));
}
return result;
}
}
Employee e1 = new Employee("1");
Employee e2 = new Employee("2");
Map<Employee, String> empMap = new HashMap<Employee, String>();
empMap.put(e1, "Emp1");
empMap.put(e2, "Emp2");
Set<Employee> keys = empMap.keySet();
for (Employee e: keys)
{
e.setEmpID("1");
}
for (Employee e: keys)
{
System.out.println(e.getEmpID());
System.out.println(e.hashCode());
}
System.out.println(empMap.get(new Employee("1")) );
我总是得到Emp1 的值。如何获取Emp2的值?
【问题讨论】:
-
我没有看到任何问题。
-
您的
equals会忽略大小写,但您的hashCode不会。