我最近在求职的实际测试中面对这个问题。
假设您得到了一个像这样的平面数据结构:
**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
现在,从上面的平面数据结构中,我们想要显示类似下面的分层树结构的内容。
-Electronics | -Television | | -21 inch | | -23 inch | | -lcd display | -Player | | -mp3player | | -vcdplayer | | | -HD display | | -DVD player
然后,如果我要向我的数组添加另一个条目,例如:
11 Test 3
然后它应该Test在下面显示条目21inch。
Test
21inch
所以对于我目前正在使用的这类东西ArrayList,可以遍历到第二级,但是不能遍历第三级。那么执行此操作的最佳方法是什么?
ArrayList
谢谢
编辑:
我被要求仅使用基于DOS的Java应用程序来构建此概念。
以下是一些示例代码,这些代码使用递归在层次结构中列出了它们。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; }
可能有一种更有效的方法,但这可行。
然后,当您要将新项目添加到层次结构时,请执行以下操作:
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); }
对于实际的显示,我只是传递了一个“选项卡级别”,其中说出了选项卡输入的距离,然后为每个孩子增加它,如下所示:
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(); }
这给了我这个:
-electronics -Television -21inch -Test -23inch -LCD display -player -mp3player -vcd player -hd quality -dvd player