我想知道如何创建一个结构来保存以下格式的三个列表:
[[[X],[Y]],[Z]]
x,y,z是三个字符串列表。
请注意,我希望第三级的x和y列表向下,第二级的z列表向下。
我尝试为x,y和z创建3个单独的arraylists,然后是另一个包含x和y的arraylist。当我试图创建最外层的arraylist以容纳所有三个时,问题就出现了,因为像
这样的东西ArrayList<ArrayList<ArrayList<String>>> outerList = new ArrayList<ArrayList<ArrayList<String>>>();
适用于x和y但不适用于z,因为z只有2级。
我理解我正在尝试做的更像是一棵树,但我不知道如何在java中实现非二叉树(x,y,z只有2个分支)。
我想要摆脱的是一种分配权重的方法,例如。用户输入一个术语,我首先遍历所有子节点(x,y,z)并尝试找到它。如果我发现它我分配了一个高权重,否则我尝试在父节点(包含x,y的列表)中找到它并给它一个中等权重,否则我在根节点中搜索并指定最小权重。所描述的结构只是我分类的术语之间的关系。
关于如何做到这一点的任何想法?
答案 0 :(得分:2)
这就是对象的力量所在。您可以创建一个包含x和y列表的类,然后创建另一个类,该类包含该类的列表以及x列表。最后你有一个这些类的列表。
如果您想要聪明一点,请尝试从ArrayList继承并覆盖或重载其方法以执行您需要的操作。 http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
您还提到了以树的方式进行此操作。要做到这一点,这里有一些很好的建议:Java tree data-structure?
答案 1 :(得分:1)
结构很容易制作,但使用它会非常难看,因为你不知道它有多深。如果这是一个集合结构,您只有x,y和z,那么您应该创建一个自定义对象来处理该已知结构。如果在运行之前你不知道结构,那么你需要这样的东西。
请注意,虽然此结构符合您的要求,但我不一定建议您使用它,除非您必须这样做。寻找替代品。您提到了一棵树,但是从您的结构中,这将是一个仅在叶节点处具有数据的树,因此,如果/当您实现它时请记住这一点。
public void useArrayList()
{
ArrayList<ArrayList<?>> weirdStructure = new ArrayList<ArrayList<?>>();
ArrayList<String> x = new ArrayList<String>();
ArrayList<String> y = new ArrayList<String>();
ArrayList<String> z = new ArrayList<String>();
ArrayList<ArrayList<String>> xy = new ArrayList<ArrayList<String>>();
xy.add(x);
xy.add(y);
weirdStructure.add(xy);
weirdStructure.add(z);
}