当值在ArrayList中时,在Map中搜索键

时间:2015-06-16 12:11:08

标签: java arraylist collections hashmap key-value

我是Java新手,我有一个for field in self.fields 。我想在给出值时从Map中搜索一个键。

地图将州的数据存储为关键,将城市的数据存储为列表。因此,假设没有重复的键或值。

以前的一些答案为许多人指出了解决方案:许多和一个:地图中的一个关键值关系,但我不了解如何检查列表中的值。

我是否遍历整个地图并为每个键获取列表并在列表中搜索?或者还有其他方法吗?

请提出一些方法。谢谢!

3 个答案:

答案 0 :(得分:1)

你应该制作倒置地图(城市 - >州地图)。

public Map<String, String> invertedMap(Map<String, List<String>> map) {
    Map<String, String> inverted = new HashMap<>();
    for (Entry<String, List<String>> e : map.entrySet())
        for (String city : e.getValue())
            inverted.put(city, e.getKey() /* state */);
    return inverted;
}

答案 1 :(得分:0)

映射旨在允许使用密钥快速访问值。反之亦然需要迭代所有值并寻找它。此外,您需要知道可以为多个密钥存储相同(或相等)的值。

为了有效地搜索给定城市名称的所有州,您可以使用逆映射,其中城市名称是关键,值是状态的集合(假设有几个城市各自处于不同的状态 - 例如,美国似乎有多个Springfield

创建这样的倒置地图的简单方法是使用Guava的Multimap作为初始地图(州 - >城市),然后使用Multimaps.invertFrom(intialMap);

编辑:关于Brett Walker的评论,Apache Commons Collections&#39; BidiMap似乎遵循类似的方法,即AbstractDualBidiMap实现内部使用两个地图,如上所述。

答案 2 :(得分:0)

我会使用Apache Common Collection库中的div作为起点。

对于$someEle.append("<div><span>5</span><span>€</span></div>"); var $newELE = $someEle.find('div'); 部分,我会考虑使用BidiMap,因为它会修饰另一个地图,允许它为一个键设置多个值。

我已使用List<String>位而不是MultiValueMap。我认为两者都有用。