我有一张地图,其中的值引用了对象列表。
//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;
}
答案 0 :(得分:1)
根据您提供的伪代码,无需迭代Map中的所有键。你可以直接在地图上做一个get(id)。如果Map有它,你将得到你可以迭代的元素列表,如果它的计数是&gt;则得到元素。 2.如果id不存在,则返回null。因此,在这种情况下,您可以稍微优化您的代码。
由于