har*_*alb 16 java data-structures
我最近在一份工作的实际测试中遇到了这个问题.
假设您有一个像这样的平面数据结构:
**Category** **Name** **Parent**
1 electronics 0
2 Television 1
3 21inch 2
4 23inch 2
5 LCD display 2
6 player 1
7 mp3player 6
8 vcd player 6
9 dvd player 6
10 hd quality 8
Run Code Online (Sandbox Code Playgroud)
现在从上面的平面数据结构我们想要显示类似下面的分层树结构.
-Electronics
| -Television
| | -21 inch
| | -23 inch
| | -lcd display
| -Player
| | -mp3player
| | -vcdplayer
| | | -HD display
| | -DVD player
Run Code Online (Sandbox Code Playgroud)
然后如果我在我的数组中添加另一个条目,如:
11 Test 3
Run Code Online (Sandbox Code Playgroud)
然后它应该显示Test下面的条目21inch.
所以对于我目前正在使用的这类东西ArrayList,它已经能够遍历到第二级但不能在第三级进行.那么这样做的最佳方式是什么?
谢谢
编辑:
我被要求仅使用基于DOS的Java应用程序构建此概念.
Mat*_*t N 10
下面是一些示例代码,使用递归在层次结构中列出它们.Item类有一个子列表.诀窍是将任何新的孩子添加到正确的父母.这是我创建的方法:
public Item getItemWithParent(int parentID){
Item result = null;
if(this.categoryID == parentID){
result = this;
} else {
for(Item nextChild : children){
result = nextChild.getItemWithParent(parentID);
if(result != null){
break;
}
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
可能有一种更有效的方法,但这是有效的.
然后,当您想要向层次结构中添加新项时,请执行以下操作:
public void addItem(int categoryID, String name, int parentID) {
Item parentItem = findParent(parentID);
parentItem.addChild(new Item(categoryID, name, parentID));
}
private Item findParent(int parentID) {
return rootNode.getItemWithParent(parentID);
}
Run Code Online (Sandbox Code Playgroud)
对于实际的显示,我只是传入一个"标签级别",它表示标签的距离,然后为每个孩子递增,如下所示:
public String toStringHierarchy(int tabLevel){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < tabLevel; i++){
builder.append("\t");
}
builder.append("-" + name);
builder.append("\n");
for(Item nextChild : children){
builder.append(nextChild.toStringHierarchy(tabLevel + 1));
}
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)
这给了我这个:
-electronics
-Television
-21inch
-Test
-23inch
-LCD display
-player
-mp3player
-vcd player
-hd quality
-dvd player
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18371 次 |
| 最近记录: |