我想实现一个存储员工(id,name,salary,dept)对象的hashmap,并以这样的方式定义hascode和equals,我可以通过名称或id搜索对象,名称也可以相同对于多个员工,id始终是唯一的
答案 0 :(得分:2)
@Mureinik是对的。但是你应该小心他们的同步。因此,包装器对象似乎是合适的。通过这种方式,如果您添加或删除Employee
,则可以通过地图客户端的一次调用在两个地图中执行此操作。
唯一的id
字段足以支持equals()
和hashcode()
方法定义。它不会阻止检索与另一个名称相同的Employee
。
您可以创建Employees
:您自己的类型,它包装两个地图,进行同步并提供访问和检索方法。
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);
}
}