我们有很多这样实现的节点:
public class Person{
private String name;
private int id1;
private int id2;
private Node next; // or left/right, depending on what you're using.
}
- 如何使用
id1
或id2
获取name
平均不到 O(n)?< - 如何按
id2
平均O(n) 或更快 的顺序打印所有name
?
我想到了用id1
排序的哈希表和id2
排序的二叉搜索树。作为数据结构的初学者,我仍然不确定这种方法。
- 就易于实现而言,这是最简单的解决方案吗 和使用的数据结构?
- 使用两个基于同一个对象的数据结构会带来任何问题吗?我想知道像我这样“复制”数据是否会对删除和插入造成任何问题,但也欢迎其他问题和原始问题的解决方案。
最佳答案
我确实会使用 HashMap<Integer, Person>
通过 ID1 和 TreeMap<Integer, Person>
存储人员按 ID2 存储人员,按 ID2 排序。
第一个是O(1)通过ID1得到名字。第二个是 O(N),用于遍历所有值。
回答您的问题:
- 我认为这确实是最简单的解决方案
- 确保将两个映射封装在一个对象中,同时提供所需的方法并在两个映射中插入/删除。不要将这两张 map 暴露在外面。如果将迭代器或第二个映射的值集合暴露给外部,请确保使用
Collections.unmodifiableCollection()
将其包装起来在返回之前,以防止从外部修改集合。
关于java - 使用哪种数据结构通过对象的两个 ID 之一搜索对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782034/