【问题标题】:N Level Map, Need to place map inside mapN级地图,需要在地图内放置地图
【发布时间】:2013-11-09 17:10:09
【问题描述】:

需要一个动态数据结构,可能类似于MAP(Java.util.Map),可以存储String和Object。并且那个 Object 可能又需要存储另一个 map,它可以存储 String 和 Object。

【问题讨论】:

  • 那么,您尝试过什么?问题出在哪里?

标签: java map


【解决方案1】:

我怀疑请求者正在寻找类似以下的内容:

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&lt;S,V&gt; 的接口,但在内部实现为可变深度Map&lt;K,Map&lt;K, ... V&gt;&gt;,其中KS 的连续后缀,这样,如果您在顶部之间连接所有Ks树和V,您将获得用作密钥的S。上面呈现了一个(非常近似的)Map&lt;K,K, ... , V&gt; 的接口,但内部是Map&lt;List&lt;K&gt;, V&gt;

【讨论】:

    【解决方案2】:

    您可以将地图(和其他容器)嵌套到任意深度。这会将一个地图放在另一个地图中……总深度为 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&lt;String, Object&gt; 的代价是,每当您通过get() 访问某些内容时,您需要将其转换为实际的任何内容,以便能够将其用作比Object 更具体的内容.

    【讨论】:

    • 反对者,请解释一下为什么这不能回答问题?
    【解决方案3】:

    听起来您需要MultimapTrie

    【讨论】:

    • 我真的不明白为什么多重贴图比法线贴图更嵌套,或者这里有什么尝试提供...(注意 - 我不是反对者)
    • 因为 Tries 本质上是嵌套的地图。例如字符串树是Map[String, Map[String, Map[...]]]。否决了这一点的人需要再次阅读他们的本科数据结构书。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多