我有一些来自服务器的数据,看起来像这样。每行都是一个数组,因此数据以数组的形式出现:
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();
}
}
一行中的每个元素都属于这些子类中的一个。树的每个级别属于同一个类。
我现在的主要问题是,如何有效地比较它们并将所需的对象置于其适当的父项下?
我需要你的想法。如果还有代码,我将非常感谢您将其添加到您的建议或指向我那里。
谢谢大家。
答案 0 :(得分:0)
如果覆盖.equals和.hashCode,则可以使用Set(HashSet实现)进行O(1)查找。我会像mmyers一样推荐你研究一些数据结构--Java有许多专为更专业的东西而设计。