所以这是我面临的情况:我有称为节点的可迭代对象。(大约数千个)每个节点包含许多键和值对。我的算法创建了一个新节点(称为myNode)并检查可迭代集中的每个节点,以及可迭代集中的每个节点:对于节点中的每个对(键,值):如果myNode包含对的键:如果myNode 对应的值更大:替换为新值。否则:myNode.put(键,值)
目前,我为此使用 HashMap,它非常慢,在用 ArrayList 替换 HashMap 后,我实际上得到了更好的结果,这很奇怪。有人可以建议使用更好的数据结构来提高我的程序的性能吗?
谢谢 !
EDI:代码
ArrayList<Long> newDist = new ArrayList<Long>();
HashMap<Long, Long> myNode = new HashMap<Long, Long>();
for (Node i : nodes){//copy neighbors to set
Set<Long> view = i.keySet();
for (Long j : view) {
if (!(myNode.containsKey(j))) {
myNode.put(j, i.get(j));
} else if (myNode.get(j) > i.get(j)) {
myNode.put(j, i.get(j));
}
}
}
context.write(key, myNode);