最近面试,要在DS中保存海量的员工信息。
我将解决方案作为以 emp Id 为键的 Hashmap 给出。
后续的问题是如果用户想根据名字搜索怎么实现。我建议使用 emp name 作为键,并保存所有与 Arraylist 同名的员工。
下一个跟进问题很棘手,需要创建一个 map ,用户可以在其中根据 emp Id 或 emp 名称进行搜索。如何在 map 中实现?
以内存高效的方式实现它。
最佳答案
这是一个肮脏的解决方案 (是的——非常肮脏,永远不要在生产环境中这样做!),但是如果 key 是不同的类型并且一个是不是另一个的子类型(例如 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();
}
在生产代码中,我会使用两个单独的 map 或自定义字典类。
关于java - 多键 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32715615/