Сравнение связанных объектов
У меня есть данные с сервера, которые выглядят так. Каждая строка представляет собой массив, поэтому данные поступают в виде массива массивов:
net Person age
net Person heightnet Address streetname
org Company name
org Company locationcom 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();
}
}
Каждый элемент в строке принадлежит одному из этих подклассов. Каждый уровень дерева принадлежит к одному классу.
Теперь мой главный вопрос заключается в том, как я могу эффективно их сравнивать и приносить требуемые объекты под их соответствующим родителем?
Пожалуйста, мне нужны ваши идеи. Если есть код, я буду признателен, что вы добавите его в свои предложения или укажите там.
Спасибо всем.
Если вы переопределите .equals и .hashCode, вы можете использовать Set (реализация HashSet) для выполнения O (1) поиска. Я бы рекомендовал, например, mmyers, взглянуть на некоторые структуры данных. В Java многие из них разработаны для более специализированных задач.
- Вопросы
- Data-structures
- Сравнение связанных объектов