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

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

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

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

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

最佳答案

这是一个肮脏的解决方案(是的-非常肮脏,从不在生产中使用它!),但是如果键的类型不同且一个键不是另一个键的子类型(例如longString),它将起作用。用两个键都放每个员工,然后按提供的键idname放置每个员工:

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/

10-11 22:35