用于比较和插入的最有效的数据结构

时间:2013-03-17 08:21:08

标签: data-structures

所以这就是我面临的情况:我有可称为节点的可迭代对象。 (大约数千)每个节点包含许多对键和值。 我的算法创建一个新节点(称之为myNode)并检查可迭代集中的每个节点,并且  对于可迭代集中的每个节点:      对于节点中的每对(键,值):          如果myNode包含该对的键:              如果myNode的相应值更大:                  替换为新值。          else:myNode.put(key,value)

目前,我正在使用HashMap并且它非常慢并且在用ArrayList替换HashMap之后我实际上得到了更好的结果,这很奇怪。 有人可以建议使用更好的数据结构来提高程序的性能吗?

谢谢!

EDI:CODE

        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); 

1 个答案:

答案 0 :(得分:0)

我不确定你的代码意图是什么,因为它引用了一些你没有包含的对象,但是如果NodeMap那么我会做类似......

Map<Long, Long> lowScores = new HashMap<Long, Long>();

for (Node node : nodes){
  for (Entry<Long,Long> entry : node.entrySet()) {
    Long lowScore = lowScores.get(entry.getKey());
    if (lowScore == null || lowScore > entry.getValue()){
      lowScores.put(entry.getKey(), entry.getValue()); 
    }
  }
}

这里有一些优化限制了在大型数据结构上完成的操作量,但我只是运行将证明这是优化编译器尚未针对您优化的事情。关键优化是迭代Entry的{​​{1}}个对象,而不是继续调用Mapget