需要一个动态数据结构,它可能类似于MAP(Java.util.Map),它能够存储,字符串和对象。并且该对象可能需要再次存储另一个映射,该映射可以存储,字符串和对象。
答案 0 :(得分:2)
我怀疑请求者正在寻找类似下面的内容:
class MultilevelMap<K,V> extends HashMap<List<K>,V> {
@SafeVarargs
public final put(V value, K keys...) {
put(makeKey(keys), value);
}
@SafeVarargs
public final V get(K keys...) {
return get(makeKey(keys));
}
// The remainder of this class is left as a tedious exercise for the reader
private List<K> makeKey(K[] keys) {
List<K> key = new ArrayList<K>(keys.size);
for(K k: keys) {
key.add(k);
}
return key;
}
}
特里,据我所知,它是相似的,但相反。它提供了Map<S,V>
的接口,但内部实现为变深度Map<K,Map<K, ... V>>
,其中K
是S
的连续词缀,这样如果连接所有K
{1}}位于树的顶部和V
之间,您将获得用作密钥的S
。以上显示了(非常近似)Map<K,K, ... , V>
的界面,但内部为Map<List<K>, V>
。
答案 1 :(得分:0)
您可以将地图(和其他容器)嵌套到任意深度。这将Map放在另一个Map中,另一个......总深度为10:
private Map<String, Object> nest(int levelsLeft, Map<String, Object> parent) {
if (levelsLeft > 0) {
parent.put("key" + levelsLeft,
nest(levelsLeft - 1, new HashMap<String, Object>()));
}
return parent;
}
// from somewhere else
Map<String, Object> nested = nest(10, new Map<String, Object>());
((Map<String, Object>)nested.get("key10")).get("key9"); // goes all the way down to "key1"
请注意,声明Map<String, Object>
的价格是,每当您通过get()
访问某些内容时,您需要将其转换为实际可用的内容,以便能够将其用作比Object
。
答案 2 :(得分:-1)