我正在使用Java构建Web应用程序(Tapestry 5)。 我想创建一个多级菜单,我可以在其中显示根元素,例如在页面顶部和左侧所选子项。
为了实现这一点,我想使用这样的树结构:
public class SiteMap {
private List<MenuItem> root;
public class MenuItem {
private String pageFileName;
private String pageNavigationName;
private List<MenuItem> children;
private MenuItem parent;
public MenuItem(String pageFileName, String pageNavigationName, MenuItem parent) {
this.pageFileName = pageFileName;
this.pageNavigationName = pageNavigationName;
this.parent = parent;
}
public String getPageFileName() {
return pageFileName;
}
public String getPageNavigationName() {
return pageNavigationName;
}
public List<MenuItem> getChildren() {
return children;
}
public MenuItem getParent() {
return this.parent;
}
}
}
现在,如果我想在树中的某个位置构建一个基于1个父项的子项(只有pageFileName - String)的菜单。我必须以递归方式遍历树遍历才能根据pageFileName(String)找到这个父项,这似乎不是一个好方法。
这是(使用树结构)正确的方法来实现这个吗?或者有更好的选择吗? 任何想法和提示都表示赞赏!
提前致谢!
森
答案 0 :(得分:0)
为什么不将MenuItem用于父级和子级,并保留每个子级对其父级的引用?
List<MenuItem> children; // empty/null for leaf nodes
MenuItem parent; // null for root nodes
答案 1 :(得分:0)
MenuItem root = null;
MenuItem curr = myMenuItem;
while(curr.getParent() != null) {
curr = curr.getParent();
}
root = curr;
这样做是没有错的,代码将运行得非常快,特别是因为你不会有数百万的菜单条目。