在内存中存储父子映射。要有效地列出父母的所有可到达的孩子

时间:2013-02-22 12:13:13

标签: java algorithm data-structures graph

我在reational数据库中有父子映射,如下所示,

relationship_id | parent_id | child_id
1               | 100009    | 600009
2               | 100009    | 600010
3               | 600010    | 100008

对于性能优化,我喜欢将所有这些映射保留在内存中。 在这里,孩子将拥有多个父母,而父母则拥有2个以上的孩子。 我猜,我应该使用“Graph”数据结构。

填充内存是一次性活动。我担心的是,当我要求列出所有孩子(不仅是直系孩子)时,应该尽快归还。添加和删​​除很少发生。 我应该使用什么数据结构和算法?

尝试MultiHashMap,以实现O(1)搜索时间,但它有更多冗余。

2 个答案:

答案 0 :(得分:5)

拥有父子关系的图表数据结构。每个GraphNode只能有ArrayList个孩子。

然后让HashMap将ID映射到GraphNode。

你需要解决一些问题,这样你就不会创建一个循环(如果可能的话),这将导致无限循环。

答案 1 :(得分:1)

您需要一个自定义Node类和一个hashmap来存储节点引用,以便于查找。

for each row in database
if parent node exists in map
  get it
else
  create it and add it

if child node exists in map
  get it
else
  create it and add it

set relationship between parent and child

节点类看起来像;

public class Node {

  private int id;

  private List<Node> parents = new ArrayList<Node>();
  private List<Node> children = new ArrayList<Node>();

  //getters and setters

}