Сравнение связанных объектов - PullRequest
0 голосов
/ 05 августа 2009

У меня есть некоторые данные с сервера, который выглядит следующим образом. Каждая строка представляет собой массив, поэтому данные поступают в виде массива массивов:

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, я хотел бы сравнить последующие объекты, чтобы избежать дублирования. Как вы можете видеть, «Person» и «Address» имеют одну и ту же родительскую «net», поэтому я хотел бы, чтобы оба были под одним и тем же родителем, чтобы была одна «net». Вы также можете видеть, что у «age» и «height» также есть один родительский «Person», я хочу, чтобы оба указали «Person». «Компания» будет находиться под единым «org», а их дочерние «name» и «location» будут находиться в «Company». Как я могу сравнить их, чтобы добиться такого поведения?

Я реализовал древовидную структуру в форме, похожей на связанный список, как вы уже заметили.

//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 голосов
/ 05 августа 2009

Если вы переопределяете .equals и .hashCode, вы можете использовать Set (реализация HashSet) для поиска O (1). Я бы рекомендовал, подобно mmyers, взглянуть на некоторые структуры данных - в Java их много, которые предназначены для более специализированных вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...