【发布时间】:2013-02-01 15:40:21
【问题描述】:
在 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);
}
性能不是问题,但代码美观才是问题。
【问题讨论】:
-
是的,它会简化使用这样的地图,但它如何帮助我摆脱对创建的冗长的多级检查?
-
duffymo,我想过(其实我只是需要一些特殊的哈希和相等函数),但是对于这么简单的任务来说,工作量似乎太大了。
-
“平面”是什么意思并不明显。你能重述一下吗?
-
我想知道规范会再次更改多少次。
-
我现在要停下来。再次抱歉。