N级地图,需要在地图内放置地图

时间:2013-11-09 17:10:09

标签: java map

需要一个动态数据结构,它可能类似于MAP(Java.util.Map),它能够存储,字符串和对象。并且该对象可能需要再次存储另一个映射,该映射可以存储,字符串和对象。

3 个答案:

答案 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>>,其中KS的连续词缀,这样如果连接所有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)

听起来你需要MultimapTrie