有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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. 如何在平均值小于O(n)的情况下使用id1id2获得name
  2. 如何以平均O(n)或更快的顺序打印所有name

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

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

共 (1) 个答案

  1. # 1 楼答案

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

    第一个是O(1),通过ID1获得名称。第二个是O(N),用于迭代所有值

    要回答您的问题:

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