Каков наилучший способ в Java сохранить значения ("o") в древовидной структуре следующим образом:
obj1
/\
/ \
/ \
obj2 obj3
/\ /\
/ \ / \
/ \ / \
obj4 obj5 obj6 obj7
/\ /\ /\ /\
/ \ / \ / \ / \
o8 oN...
Это похоже на дерево, но мне не нужна произвольная глубина. Мне скорее нужны сильные типы данных и предопределенные хорошие методы работы с окончательной структурой.
Мне нужно получить какой-то список значений ключами - точно так же, как на моем снимке. Другими словами, структура не должна становиться плоской.
Мне нужно .get(obj3)
чтобы вернуть {obj6, obj7},.get(obj1) - {obj2, obj3}
.
На данный момент я использую Map для этого, но раздувание такой карты является уродливым, потому что мне нужно проверить каждый уровень структуры. Похоже, что (данные - это карта):
if(data.get(somedouble) == null) {
Map<Integer, Data> inm = new TreeMap<>();
inm.put(someint, obj);
Map<Double, Map<Integer, Data>> m = new TreeMap<>();
m.put(somedouble2, inm);
data.put(somedouble, m);
}
else {
if(data.get(somedouble).get(somedouble2) == null) {
Map<Integer, Data> inm = new TreeMap<>();
inm.put(someint, obj);
data.get(somedouble).put(somedouble2, inm);
}
else
data.get(somedouble).get(somedouble2).put(someint, obj);
}
Производительность не проблема, но красота кода.