Gwt 嵌套阵列列表

Gwt 嵌套阵列列表,gwt,treeview,Gwt,Treeview,我正在使用GWT和java构建一个树,树中应该有一些嵌套的树,它们也应该有,等等。这就是我实现它的方式(树扩展用于整洁的add方法,例如“addCounty”、“addContinental”等): 公共类myTree扩展了Tree{ ArrayList国家=空; ArrayList大陆=空; ArrayList geo=null; 公共myTree(){ 超级(); 国家/地区=新阵列列表(); 大陆=新阵列列表(); geo=newarraylist(); geo.add(大陆); } .

我正在使用GWT和java构建一个树,树中应该有一些嵌套的树,它们也应该有,等等。这就是我实现它的方式(树扩展用于整洁的add方法,例如“addCounty”、“addContinental”等):

公共类myTree扩展了Tree{
ArrayList国家=空;
ArrayList大陆=空;
ArrayList geo=null;
公共myTree(){
超级();
国家/地区=新阵列列表();
大陆=新阵列列表();
geo=newarraylist();
geo.add(大陆);
}
.
.
.
}

我觉得这不是正确的方法。树应该有更多的节点,但为了简单起见,我只保留了三个。有没有关于如何正确实施的建议?(我认为只使用ArrayList而不进行实例化,但这是正确的方法吗?

您需要一个非常容易实现的数据结构:

public class Tree<T> {
    private Node<T> rootNode;

    public Tree(T satelliteData) {
        root = new Node<T>();
        root.setSatelliteData(satelliteData);
    }

    public static class Node<T> {
        private T satelliteData;
        private Node<T> parent;
        private List<Node<T>> children = new ArrayList<T>();

        // add getters/setters
    }
    // getters setters omitted
}
公共类树{
专用节点rootNode;
公树(T卫星数据){
根=新节点();
根卫星数据(卫星数据);
}
公共静态类节点{
私人卫星;
私有节点父节点;
private List children=new ArrayList();
//添加getter/setter
}
//省略getters setters
}
如果需要向这样的数据结构添加功能,我通常会创建装饰器。在中可以防止您将
变成
上帝
对象


我省略了brewity的接口,所以这是一个相当粗糙和简单的实现。使用这样的数据结构可以大大简化遍历,例如,因为它支持宽度和深度的任意大小。

我不明白为什么要管理
TreeItem
s的列表:一个
TreeItem
本身包含它的子
TreeItem
s。实际上,
Tree
TreeItem
都实现了,因此您可以将它们作为
TreeItem
容器同等对待(无论它们包含根节点还是子节点)


至于扩展
,不要这样做。这样做意味着任何使用
MyTree
的人都可能以不可预知的方式弄乱树节点,可能会破坏您需要给定级别的代码,可能会破坏某些特定项等(此外,如果您同时管理列表和树中的项!)

我可能会遗漏一些内容,但如果您使用Java,使用内置树类有什么问题?java中没有内置的
类。OP实际上是在讨论GWT中的
小部件,这是一个treeview小部件,具有嵌套的
TreeItem
s形式的自身数据结构。我知道,但他描述的结构不能以任意深度工作。我不知道GWT,所以我对它的内部结构没有深入了解。
public class Tree<T> {
    private Node<T> rootNode;

    public Tree(T satelliteData) {
        root = new Node<T>();
        root.setSatelliteData(satelliteData);
    }

    public static class Node<T> {
        private T satelliteData;
        private Node<T> parent;
        private List<Node<T>> children = new ArrayList<T>();

        // add getters/setters
    }
    // getters setters omitted
}