我用多个键搜索地图实现。我知道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” 我自己的实现不是一种选择。我想用一些我可以信任的东西。
答案 0 :(得分:3)
我认为Guava有一个Table实现Table<Key1,Key2,Value>
,您可以在其中table.get(key1)
或table.get(key2)
或table.get(key1, key2)
。我认为它只支持每个表两个键,但不确定。可能想看看那个。
答案 1 :(得分: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");
答案 2 :(得分:0)
如果您可以转换需求并多次设置值,每个键一次,那么Guava's 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]