如何在Java中按“ /”拆分并像树一样存储为分层结构?

时间:2019-01-31 18:51:41

标签: java tree

我正在尝试按树状数据结构存储实例对象。 以我为例,我将获得以下字符串列表:

“ A / B / C”, “ A / B / D”, “ A / T / P”, “ Q / W / E”等。

“ /”代表其层次结构。例如,B的父母,C和D的父母B。

这些字母中的每个字母都代表一个Instance对象,因此根据“ /”将它们拆分后,如何在Java中按层级将这些字母作为Instances对象存储在列表中?我是否还需要在实例对象中添加父项或子项或两个字段?

实例对象:

public class Instance { 

  private String name;

  private String description;

  private int type;
}

谢谢。

1 个答案:

答案 0 :(得分:3)

首先,您需要重新访问数据结构Instance类。从您提供的示例来看,您似乎正在尝试创建一个Tree数据结构,其中一个节点可以具有多个子节点。您需要设计您的Instance类,以处理一个节点中的多个子代。 尝试使用实例列表来处理子代。

您的课程看起来像-

class Instance {
  private String name;
  private String description;
  private int type;
  List<Instance> children;
}

尝试拆分输入字符串并遍历每个子字符串,检查是否已经有名称的Instance对象。否则,您将创建一个新的Instance对象。需要修改拆分字符串中的上一个元素,以将当前节点添加为其子节点。

例如,如果您拆分"A/B/C",并对其进行迭代。

对于A,第一个元素-也是其根,请检查是否为Instance创建了A对象,如果没有,则创建A。将A存储在temp变量中,以便以后修改A

对于Btemp持有A的引用,检查是否为Instance创建了B对象,如果没有,则创建{{1} }。修改B的{​​{1}}以将temp添加到列表中,让children保留对B的引用

对于tempB持有C的引用,检查是否为temp创建了B对象,如果没有,则创建{{1} }。修改Instance的{​​{1}}以将C添加到列表中,让C保留对temp的引用。