多键哈希图

Lat*_*thy 5 java

最近,我接受了一次采访,以在DS中保存大量的员工详细信息。

我以emp Id为键将解决方案作为Hashmap给出。

后续问题是用户是否要基于名称搜索如何实现它。我建议使用emp名称作为键,并使用Arraylist保存所有具有相同名称的员工。

下一个后续问题很棘手,需要创建一个ONE映射,以便用户可以根据emp ID或emp名称进行搜索。如何在地图中实现?

以内存有效的方式实现它。

Ale*_*you 1

这是一个肮脏的解决方案 (是的 - 非常肮脏,永远不要在生产中这样做!),但如果密钥具有不同类型并且一个不是另一个的子类型(例如longString),它就会起作用。将每个员工的两个密钥放在一起,并通过提供的密钥获取,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();
}
Run Code Online (Sandbox Code Playgroud)

在生产代码中,我将使用两个单独的地图或自定义字典类。