优化使用值列表搜索HashMap

时间:2017-04-23 10:26:47

标签: java list hashmap

我有一张地图,其中的值引用了对象列表。

//key1.getElements()  - produces the following
[Element N330955311 ({}), Element N330955300 ({}), Element N3638066598 ({})]

我想搜索每个键的列表并找到给定元素的出现次数(> = 2)。

目前我对此的处理方法很慢,我有很多数据,我知道执行时间是相对的,但需要40秒〜。

我的方法..

public String occurance>=2 (String id)
//Search for id
//Outer loop through Map 
//get first map value and return elements 
    //inner loop iterating through key.getElements()
      //if match with id..then iterate count
      //return Strings with count == 2 else return null

之所以这么慢是因为我有很多我正在寻找的ID - 8000~我的地图中有3000个键。那么它的> 8000 * 3000 * 8000(假设key / valueSet映射中的每个id /元素至少存在一次)

请以更有效的方式帮助我进行此搜索。我不太专注于Java,所以也许有一些明显我缺少的东西。

请求后在实际代码中编辑:

public void findAdjacents() {
        for (int i = 0; i < nodeList.size(); i++) {
            count = 0;
            inter = null;
            container = findIntersections(nodeList.get(i));

            if (container != null) {
                intersections.add(container);
            }
        }
        }

public String findIntersections(String id) {
        Set<Map.Entry<String, Element>> entrySet = wayList.entrySet();
        for (Map.Entry entry : entrySet) {
            w1 = (Way) wayList.get(entry.getKey());
            for (Node n : w1.getNodes()) {
                container2 = String.valueOf(n);
                if (container2.contains(id)) {
                    count++;
                }
                if (count == 2) {
                    inter = id;
                    count = 0;
                }
            }
        }
    if (inter != (null))
        return inter;
    else
        return null;
}

1 个答案:

答案 0 :(得分:1)

根据您提供的伪代码,无需迭代Map中的所有键。你可以直接在地图上做一个get(id)。如果Map有它,你将得到你可以迭代的元素列表,如果它的计数是&gt;则得到元素。 2.如果id不存在,则返回null。因此,在这种情况下,您可以稍微优化您的代码。

由于