我有一个LinkedHashMap的,我挺过来了双迭代,如下面的代码表示:与对称的结果HashMap的双循环(跳过冗余的情况下)
LinkedHashMap<Integer,Integer> nmResultMap = getResultMap();
float[][] results = new float[nmResultMap.size()][nmResultMap.size()];
for (Entry<Integer,Integer> e :nmResultMap.entrySet()){
for (Entry<Integer,Integer> t :nmResultMap.entrySet()){
results[e.getValue()][t.getValue()] = doSomthng(e.getKey(),t.getKey());
}
}
这工作得很好,但由于结果是对称的(doSomthng(e.getKey(),t.getKey())==doSomthng(t.getKey(),e.getKey())
)我想通过在第一次迭代的下一个(当前+ 1)位置开始第二次迭代来保存一些运行时间,就像使用eg。数组:
for (int i =0;i<array.length();i++){
for (int j=i+1;j<array.length();j++){
doSomthng(array[i][j]);
}
}
谢谢您的帮助
这个语法迭代整个集合;您将不得不手动将数据转换为允许随机访问并自行迭代的结构。你也可以明确地使用迭代器并手动将它们推进到所需的位置。 – Dariusz
“结果是对称的”是什么意思?结果将永远不对称:https://ideone.com/9g5x3L,那么哪种优化不会删除单个唯一的组合?您可能正在做一些*奇怪*:> –
doSomthng(e.getKey(),t.getKey())== doSomthng(t.getKey(),e.getKey())的结果 – Hellski