我想实现一个存储雇员(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);
  }
}

10-02 11:26
查看更多