4

我用多个键搜索地图实现。我知道Apache Commons,但它并不满足我。

我希望能够传递一个密钥并获取包含传递密钥的所有条目,例如

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 有一个 Table 实现Table<Key1,Key2,Value>,您可以在其中执行table.get(key1)ortable.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

如果您可以翻转需求并多次输入值,每个键一次,那么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 回答