4

複数のキーを使用してマップの実装を検索します。Apache Commonsは知っていますが、満足できません。

1つのキーを渡して、渡されたキーを含むすべてのエントリを取得できるようにしたい。

MultiKeyMap mkm = new MultiKeyMap();
mkm.put("key1", "key2", "key3", "1");
mkm.put("key1", "key22", "key33", "2");
mkm.put("key12", "key22", "key32", "3");

mkm.get("key1");

nullを返しますが、この場合は「1」と「2」を取得したいのですが、私自身の実装はオプションではありません。信頼できるものを使いたい。

4

3 に答える 3

3

Guava には、orまたはTable<Key1,Key2,Value>を実行できる Table 実装があると思います。テーブルごとに 2 つのキーしかサポートしていないと思いますが、よくわかりません。それを見てみたいかも。table.get(key1)table.get(key2)table.get(key1, key2)

グアバ テーブル javadoc

于 2013-02-10T11:40:34.433 に答える
1

HashMapでこれを行うことができると思います

HashMap<String, ArrayList<String>> map = new HashMap<>();
    ArrayList<String> ls=new ArrayList<>();
    ArrayList<String> ls2=new ArrayList<>();
    ls.add("key3");
    ls.add("1");
    ls.add("key2");
    ls.add("key22");
    ls.add("key33");
    ls.add("2");

    ls2.add("key22");
    ls2.add("key32");
    ls2.add("3");

    map.put("key1",ls);
    map.put("key12", ls2);

    map.get("key1");
于 2013-02-10T11:49:35.520 に答える
0

要件を変えて値を複数回 (キーごとに 1 回) 入れることができる場合、Guava の MultiMapは非常に使いやすいです。

    Multimap<String, String> map = HashMultimap.create();
    map.put("key1", "1");
    map.put("key2", "1");
    map.put("key3", "1");

    map.put("key1", "2");
    map.put("key22", "2");
    map.put("key33", "2");

    map.put("key12", "3");
    map.put("key22", "3");
    map.put("key32", "3");

    Collection<String> values = map.get("key1");
    System.out.println(values);

版画

    [2, 1]
于 2013-02-11T16:27:07.233 に答える