1

这么多热心的 Java 专家让我很受鼓舞,今天我敢再提出一个问题寻求帮助(我所有的问题都来自现实生活中的项目——而且由于我走的是学习 Java 的捷径,所以我遇到的困难比Java的正常课程)..

下面是我要实现的数据结构(最终结果应该是一个以id为key的TreeMap)

id (int)   Characteristic (int)  parent(by id) immediate children (by id)
1           1                    {}            {2,3,4}
2           99                   {1}           {}
3           99                   {1}           {}
4           2                    {1}           {5,6}
5           99                   {2}           {}
6           3                    {2}           {7,8}
7           99                   {3}           {}
8           4                    {3}           {x,xx, ...}
....
....

前两列是已知的,后两列需要以编程方式获取。

以下是规则:

1) Characteristc 为 1 的项目是祖先,永远不会有父项。

2) Characteristic 为 99 的项目永远不会有子项。

3)具有特征(2 - 9)的项目可以有父母和孩子,他们的孩子可以有孩子(必须大于他们或99)或没有孩子(99)。例如,2 可以有 99 和 3 作为孩子,但 3 不能有 2 作为他们的孩子)

谢谢

4

2 回答 2

0

你不是在问约翰。但是你需要在这里考虑面向对象。像这样创建一个类:

Item:
   int id
   int characteristic
   Item parent
   List<Item> children

无论您使用什么数据结构,您都可以使用上述对象。保持对象与数据结构分离很重要。您稍后可能会决定需要地图或树集。现在您所要做的就是创建一个包含所有 Item 对象的树集。

您的问题与树集无关,更多的是如何使用干净的面向对象创建这些对象。

于 2010-11-11T19:39:52.603 回答
0

您可能将树和地图的概念混为一谈。Java Map 提供了一个接口,允许您使用(通常)另一种类型的对象作为键来映射一堆对象。在您的情况下,您似乎将使用 Longs 作为键。具体的 Map 可以是 HashMap 也可以是 TreeMap,它们各有优势—— HashMap 检索通常更快,但 TreeMap 具有排序键的优势。但是您不能强制 TreeMap 创建特定的树结构。它会自己管理它的树形。为了表示您的树项目,您需要某种树节点对象,支持 addChild、getChildren、getParent 等操作。如果您使用树节点对象构建树,那么您可以轻松地将这些对象添加到地图并通过 id 检索它们。

于 2010-11-11T19:48:09.527 回答