Java:查找父级和子级…树、循环、ArrayList、列表、HashMap等等。要做什么?

Java:查找父级和子级…树、循环、ArrayList、列表、HashMap等等。要做什么?,java,hashmap,treemap,Java,Hashmap,Treemap,很多热心的Java专家都鼓励我,今天我敢再问一个问题寻求帮助。我所有的问题都来自现实生活中的项目——而且因为我选择了学习Java的捷径,所以我比普通的Java课程有更多的困难 下面是我想要实现的数据结构,最终结果应该是一个以id为键的树状图 id (int) Characteristic (int) parent(by id) immediate children (by id) 1 1 {} {2,3,4}

很多热心的Java专家都鼓励我,今天我敢再问一个问题寻求帮助。我所有的问题都来自现实生活中的项目——而且因为我选择了学习Java的捷径,所以我比普通的Java课程有更多的困难

下面是我想要实现的数据结构,最终结果应该是一个以id为键的树状图

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的1项是祖先,永远不会有父项

2件具有99特点的物品永远不会有孩子

3具有特征2-9的项目可以有父项和子项,其子项可以有必须大于其或99或无子项99的子项。例如,2可以将99和3作为子对象,但3不能将2作为子对象


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

Item:
   int id
   int characteristic
   Item parent
   List<Item> children
无论使用何种数据结构,都可以使用上述对象。保持对象与数据结构的解耦非常重要。您可能稍后决定需要地图或树集。现在,您只需创建一个包含所有项目对象的树集


您的问题与treeset以及如何使用干净的对象定向创建这些对象无关

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

john,尽管我们可能很热心……但不清楚实际问题是什么。亲爱的john,您确定这不是家庭作业吗?不,这是我的小项目。我希望我能再次成为一名学生!因为我熟悉SAS,所以我更愿意从数据集的角度思考……亲爱的Carl,我假设我有一个数据集,前两列是已知id和特征,我想找到最后两列。还请注意,每个项目的顺序也很重要。