java - 多键 HashMap

标签 java

最近面试,要在DS中保存海量的员工信息。

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

后续的问题是如果用户想根据名字搜索怎么实现。我建议使用 emp name 作为键,并保存所有与 Arraylist 同名的员工。

下一个跟进问题很棘手,需要创建一个 map ,用户可以在其中根据 emp Id 或 emp 名称进行搜索。如何在 map 中实现?

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

最佳答案

这是一个肮脏的解决方案 (是的——非常肮脏,永远不要在生产环境中这样做!),但是如果 key 是不同的类型并且一个是不是另一个的子类型(例如 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();
}

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

关于java - 多键 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32715615/

相关文章:

java - 手机锁定时 Admob 广告循环

java - 在Eclipse中使用swt组件创建星级评定系统

java - 如何在 Java 代码中执行文档?

JavaFX - TableView 的问题(NullPointerException)

java - 如何计算该算法的 Big O?

java - smartGWT 日期输入 validator

java - 压力 - 负载测试 Web 应用程序

java - PermGen 大小不会扩展以填充最大可用空间

java - Gradle项目中的IntelliJ IDEA编码问题

java - 在 Android 中,您将如何开发它? ( Activity 和观点问题)