java - 使用哪种数据结构通过对象的两个 ID 之一搜索对象?

标签 java data-structures

我们有很多这样实现的节点:

public class Person{
    private String name;
    private int id1;
    private int id2;
    private Node next; // or left/right, depending on what you're using.
}
  1. 如何使用 id1id2 获取 name 平均不到 O(n)?<
  2. 如何 id2 平均O(n) 或更快 的顺序打印所有name

我想到了用id1排序的哈希表和id2排序的二叉搜索树。作为数据结构的初学者,我仍然不确定这种方法。

  1. 就易于实现而言,这是最简单的解决方案吗 和使用的数据结构?
  2. 使用两个基于同一个对象的数据结构会带来任何问题吗?我想知道像我这样“复制”数据是否会对删除和插入造成任何问题,但也欢迎其他问题和原始问题的解决方案。

最佳答案

我确实会使用 HashMap<Integer, Person>通过 ID1 和 TreeMap<Integer, Person> 存储人员按 ID2 存储人员,按 ID2 排序。

第一个是O(1)通过ID1得到名字。第二个是 O(N),用于遍历所有值。

回答您的问题:

  1. 我认为这确实是最简单的解决方案
  2. 确保将两个映射封装在一个对象中,同时提供所需的方法并在两个映射中插入/删除。不要将这两张 map 暴露在外面。如果将迭代器或第二个映射的值集合暴露给外部,请确保使用 Collections.unmodifiableCollection() 将其包装起来在返回之前,以防止从外部修改集合。

关于java - 使用哪种数据结构通过对象的两个 ID 之一搜索对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782034/

相关文章:

java - JAVA ORM应用程序中RDBMS数据库的水平扩展

java - 我的 java BST 搜索实现有问题

c++ - 定点处理器中浮点运算的数据结构

algorithm - 二叉搜索树中不成功搜索的最佳情况复杂度

java - 设置窗口内部区域的大小

Java日历,将任务设置为重复

java - 让用户知道函数的非法输入

performance - 将 IP 映射到城市的数据结构

java - 在 HashMap 中将 float[] 转换为 double[]

java - 使用Java中的JSch exec从ArrayList执行命令列表