我在Java中有一个名为MenuModel的普通类(顾名思义就是嵌套菜单),如下所示:
public class MenuModel {
public String id;
public String parentId = null;
public String title;
public MenuModel parent = null;
public List<MenuModel> children = new ArrayList<MenuModel>();
}
我的代码从Web API获取数据并生成一个MenuModel的平面列表,其中只有id
,parentId
和title
字段填充了数据。但是,我需要每个MenuModel引用其父级和(可选)子级以供进一步使用。
我想到了一个方法,它使一个嵌套循环将模型相互配对,并检查它们是否是父和子。但我认为成本太高(n ^ 2或n ^ 3复杂度,项目集很大)并且只能填充parent
字段。
在Java中实现这一目标的最佳方法是什么?总结一下:
ArrayList<MenuModel> source
ArrayList<MenuModel> result
包含来自源的所有MenuModel,其中包含parentId = null
(也就是说,它是顶级菜单),每个MenuModel都有子字段,其中填充了对各自子项MenuModel的引用。此外,每个孩子都提到了他们的父母。提前致谢
答案 0 :(得分:6)
浏览所有记录并将其添加到HashMap<String, MenuModel>
(密钥为ID)。
然后,对于每条记录record
:
parent
。record.parent = parent
。parent.children.add(record)
。运行时间:预期为O(n)。