需要一个动态数据结构,可能类似于 MAP(Java.util.Map),可以存储 String 和 Object。并且该对象可能再次需要存储另一个映射,该映射可以存储字符串和对象。
问问题
302 次
3 回答
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;
}
}
据我了解,Trie 是相似的,但相反。它提供了 的接口Map<S,V>
,但在内部实现为可变深度Map<K,Map<K, ... V>>
,其中K
连续的词缀为S
,因此,如果K
将树顶部和 之间的所有 s连接起来V
,就会得到S
用作键的 s。上面呈现了一个(非常近似)的接口Map<K,K, ... , V>
,但内部是Map<List<K>, V>
。
于 2015-04-03T00:24:00.583 回答
0
您可以将地图(和其他容器)嵌套到任意深度。这将一个地图放在另一个地图中,另一个地图......总深度为 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"
请注意,声明 a 的代价Map<String, Object>
是,每当您通过 访问某些内容时get()
,您需要将其转换为实际的任何内容,以便能够将其用作比 a 更具体的内容Object
。
于 2013-11-09T17:27:05.847 回答