我想实现一个存储雇员(id,name,salary,dept)对象的哈希图,并定义hascode和equals,这样我就可以按名称或ID搜索对象,而且多个雇员的名称也可以相同,id始终是唯一的
最佳答案
@Mureinik是正确的。但是您应该注意它们的同步。因此,包装对象似乎是合适的。这样,如果您添加或删除Employee
,则只需通过一次来自地图客户端的调用即可在两个地图中进行操作。
唯一的id
字段足以定义equals()
和hashcode()
方法。这不会阻止检索名称与另一个名称相同的Employee
。
您可以创建Employees
:您自己的类型,可以包装两个Map,进行同步并提供访问和检索方法。
public class Employees{
private Map<Long,Employee> employeesById;
private Map<String, List<Employee>> employeesByName;
public void addEmployee(Employee e){
// you add employees in both maps
}
public boolean removeEmployee(Employee e){
// you remove employees in both maps
}
public Employee getEmployee(long id){
return employeesById.get(id);
}
public List<Employee> getEmployees(String name){
return employeesByName.get(name);
}
}