【问题标题】:Multi-dimensional Arraylist Java多维数组列表 Java
【发布时间】:2012-04-27 17:08:39
【问题描述】:

我在实现这一点时遇到了一些问题。我有一个ArrayList。我一直在寻找几天,我似乎无法在任何地方找到答案:

private List<FamilyTree> Tree;

我可以像这样向array 添加新的Trees

FamilyTree Generation = new FamilyTree();
Generation.add(new Tree());

我基本上希望能够在几代人之间移动。例如,我向树中添加一个新人

Generation.add(new Person(height, hair colour, eyes));

然后我决定,我想在上一代中添加另一个人。那就是给Arraylist 包含当前的ArrayList(不是这个)。

我不确定我是否能很好地解释我的问题,所以这里有一个图表:

----John----Peter----Sandra----Rachel-----
   /   \       |       |
-Jon--Sunny---Cassie--Milo---
                     /  |  \
                   Ron-Kim-Guy

所以基本上,John、Peter、Sandra 和 Rachel 有一个首字母 ArrayList。每个人都有自己的Arraylist(s)。假设我想从 Guy 中添加到 Rachel,我将如何在单独的数组之间来回移动??

提前致谢

【问题讨论】:

  • 您的问题根本不清楚,并且您没有显示任何有意义的代码。但我感觉你只需要rootPersons.remove(rachel); guy.addChild(rachel);。请遵守 Java 命名约定:变量以小写字母开头。

标签: java arraylist multidimensional-array


【解决方案1】:

最简单的方法是每个列表都有一个对其父级的引用。 也许如果您创建一个类似于此的对象 Person:

public class Person{

ArrayList<Person> childs;//the child's nods
Person parent; //the parent, null if is the root

}

【讨论】:

    【解决方案2】:

    如果每个人有两个父母和任意数量的孩子,你可以使用这样的结构

    class Person {
       final Person mother, father;
       final List<Person> children = new ArrayList<>();
    
       public Person(Person mother, Person father) {
         this.mother = mother;
         this.father = father;
         mother.addChild(this);
         father.addChild(this);
       }
    
       public void addChild(Person p) {
         children.add(p);
       }
    }
    

    如果你想向上移动,你可以做类似的事情

    for(Person p = ...; p != null; p = p.mother) {
    
    }
    

    与其考虑如何显示树,不如考虑如何表示。

    【讨论】:

      【解决方案3】:

      您不需要多维列表,而是需要一棵树。有关树的实现,请参见 this question

      多维列表例如表格、长方体等。维度必须在一开始就知道并定义数据的结构。

      树有根节点和孩子,这些孩子在运行时可以得到更多的孩子,所以没有限制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-26
        • 2013-05-17
        • 2015-11-29
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        相关资源
        最近更新 更多