最近,我接受了一次采访,以将大量员工详细信息保存在DS中。
我以emp Id为键,将解决方案作为Hashmap给出。
后续问题是用户是否要基于名称搜索如何实现它。我建议使用emp名称作为键,并使用Arraylist保存所有具有相同名称的员工。
下一个后续问题很棘手,需要创建一个ONE映射,以便用户可以根据emp ID或emp名称进行搜索。如何在 map 中实现?
以内存有效的方式实现它。
最佳答案
这是一个肮脏的解决方案(是的-非常肮脏,从不在生产中使用它!),但是如果键的类型不同且一个键不是另一个键的子类型(例如long
和String
),它将起作用。用两个键都放每个员工,然后按提供的键id
或name
放置每个员工:
Map<?, List<Employee>> map = new HashMap<>();
public void putEmployee(Employee e) {
map.put(e.id, Arrays.asList(e)); // put by id
if (!map.containsKey(e.name)) {
map.put(e.name, new ArrayList<>());
}
map.get(e.name).add(e); // put by name
}
public Employee getById(long id) {
return map.containsKey(id) ? map.get(id).get(0) : null;
}
public List<Employee> getByName(String name) {
return map.containsKey(name) ? map.get(name) : Collections.emptyList();
}
在生产代码中,我将使用两个单独的映射或自定义词典类。
关于java - 多键哈希图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32715615/