-3

MAP (Java.util.Map) に似た動的データ構造が必要で、文字列とオブジェクトを格納できます。そして、そのオブジェクトは、文字列とオブジェクトを格納できる別のマップを再度格納する必要がある場合があります。

4

3 に答える 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;
    }
}

トライは、私が理解している限り、似ていますが反対です。のインターフェースを提示しますが、内部的にMap<S,V>は可変深さとして実装されており、ツリーの最上部と の間のすべての を連結すると、がキーとして使用されます。上記は (非常に近似的に) のインターフェイスを示していますが、内部的にはです。Map<K,Map<K, ... V>>KSKVSMap<K,K, ... , V>Map<List<K>, V>

于 2015-04-03T00:24:00.583 に答える
0

マップ (およびその他のコンテナー) を任意の深さにネストできます。これにより、Map が別の 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"

a を宣言する代償は、Map<String, Object>を介して何かにアクセスするときはいつでも、get()それを実際のものにキャストして、より具体的なものとして使用できるようにする必要があることに注意してくださいObject

于 2013-11-09T17:27:05.847 に答える
-1

MultimapまたはTrieが必要なようです。

于 2013-11-09T17:14:12.493 に答える