Сравнение связанных объектов

81
11

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



net Person age
net Person height

net Address streetname

org Company name
org Company location

com School color

com School number


Слева направо я прохожу через массив с двумя для циклов и создаю древовидную структуру каждой строки (каждый элемент является родителем ее последователя), как показано ниже. После каждого внутреннего цикла я добавляю это конкретное дерево (древовидное дерево) в 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();
}
}


Каждый элемент в строке принадлежит одному из этих подклассов. Каждый уровень дерева принадлежит к одному классу.


Теперь мой главный вопрос заключается в том, как я могу эффективно их сравнивать и приносить требуемые объекты под их соответствующим родителем?


Пожалуйста, мне нужны ваши идеи. Если есть код, я буду признателен, что вы добавите его в свои предложения или укажите там.


Спасибо всем.

спросил(а) 2009-08-05T01:08:00+04:00 11 лет, 1 месяц назад
1
Решение
90

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

ответил(а) 2009-08-05T01:18:00+04:00 11 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема