使用name或id在hashmap中进行搜索

时间:2016-11-28 09:14:38

标签: java hashmap

我想实现一个存储员工(id,name,salary,dept)对象的hashmap,并以这样的方式定义hascode和equals,我可以通过名称或id搜索对象,名称也可以相同对于多个员工,id始终是唯一的

1 个答案:

答案 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);
  }
}