我在reational数据库中有父子映射,如下所示,
relationship_id | parent_id | child_id
1 | 100009 | 600009
2 | 100009 | 600010
3 | 600010 | 100008
对于性能优化,我喜欢将所有这些映射保留在内存中。 在这里,孩子将拥有多个父母,而父母则拥有2个以上的孩子。 我猜,我应该使用“Graph”数据结构。
填充内存是一次性活动。我担心的是,当我要求列出所有孩子(不仅是直系孩子)时,应该尽快归还。添加和删除很少发生。 我应该使用什么数据结构和算法?
尝试MultiHashMap,以实现O(1)
搜索时间,但它有更多冗余。
答案 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
}