我们有很多节点实现如下:
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获得平均小于O(n)的名称?
>如何以id2的顺序打印所有名称,平均为O(n)或更快?
我想过使用一个用id1排序的哈希表和一个由id2组织的二叉搜索树.作为数据结构的初学者,我仍然不确定这种方法.
>就易于实施而言,这是最简单的解决方案吗?
和数据结构?
>使用两个基于同一对象的数据结构会造成任何问题吗?我想知道像我这样的“复制”数据是否会给删除和插入带来任何问题,但是原始问题的其他问题和解决方案也是受欢迎的.
最佳答案 我确实会使用HashMap< Integer,Person>通过ID1存储人,以及TreeMap< Integer,Person>按ID2存储人员,按ID2排序.
第一个是O(1)来获取ID1的名称.第二个是O(N),用于迭代所有值.
回答你的问题:
>我认为这确实是最简单的解决方案
>确保将两个地图封装在提供所需方法的对象中,并在两个地图中同时插入/删除.不要将两张地图暴露在外面.如果将迭代器或第二个映射的值集合暴露给外部,请确保在返回之前使用Collections.unmodifiableCollection()将其包装,以防止从外部修改集合.