比较链接对象

时间:2009-08-04 22:08:37

标签: java data-structures

我有一些来自服务器的数据,看起来像这样。每行都是一个数组,因此数据以数组的形式出现:

net      Person       age
net      Person       height

net      Address      streetname

org      Company      name
org      Company      location

com      School       color

com      School       number

从左到右,我循环遍历带有两个for循环的数组,并构建每行的树状结构(每个元素是其跟随者的父级),如下所示。在每个内部循环之后,我将该特定树(行树状)添加到ArrayList。所以ArrayList中的每个对象都像一棵树。如下所示。

+net
  Person
       age

+net
 Person
     height

+net
   Address
      streetname

+org
  Company
     name

+org
  Company
     location

+com
   School
       color

+com
  School
     number

这是我的主要问题

在我将第一个对象添加到ArrayList之后,我想比较后续对象以防止重复。正如你所看到的,“人”和“地址”具有相同的父“网”,所以我希望两者都在同一个父母之下,这样就会有一个“网”。你还可以看到“年龄”和“身高”也有相同的父“人”,我希望两者都在“人”之下。 “公司”将在一个“组织”下,他们的子女“姓名”和“地点”将在“公司”下。 如何比较它们以实现此行为?

我已经像你已经发现的链表那样实现了树状结构。

//SUPER CLASS
public class Model {

    protected String name;
    protected Model parent = null;
    protected ArrayList<Model> children;

    public Model(String name ){
        this.setName(name);
        children = new ArrayList<Model>();
    }

    public void addChild(Model node) {
        children.add(node);       
    }

    public ArrayList<Model> getChildren() {
        return children;       
    }

}


// SUBCLASSES

public class cPackage extends Model{    
    public cPackage() {
        super();
    }
}

public class cClass extends Model{
    public cClass () {
        super();
    }
}

public class cMethod extends Model{
    public cMethod () {
        super();
    }
}

一行中的每个元素都属于这些子类中的一个。树的每个级别属于同一个类。

我现在的主要问题是,如何有效地比较它们并将所需的对象置于其适当的父项下?

我需要你的想法。如果还有代码,我将非常感谢您将其添加到您的建议或指向我那里。

谢谢大家。

1 个答案:

答案 0 :(得分:0)

如果覆盖.equals和.hashCode,则可以使用Set(HashSet实现)进行O(1)查找。我会像mmyers一样推荐你研究一些数据结构--Java有许多专为更专业的东西而设计。