【发布时间】:2018-06-24 23:25:54
【问题描述】:
我在 Java 8 中有以下问题编程。HashSet“mySet”通常包含数千个整数,是我程序的瓶颈。它经常执行。加速它会导致执行时间更快。
void doStuff(int val){
for (int i : mySet) {
if (val > limits)
alpha = arrayA[i] + arrayB[val];
else
alpha = arrayK[i][val] + arrayA[i] + arrayB[val];
if (cmpArray[i] > alpha) {
cmpArray[i] = alpha;
arrayC[i] = val;
}
if (alpha == 0) {
zeroSet.add(i);
}
}
}
我尝试使用并行流来更快地完成这项工作:
void doStuff(int val){
if (val > limits)
mySet
.parallelStream()
.filter(p -> this.cmpArray[p] > -(arrayA[p] + arrayB[val]))
.forEach(p -> op(p, val, -(arrayA[p] + arrayB[val])));
else
mySet
.parallelStream()
.filter(p -> this.alpha[p] > arrayK[p][val] - arrayA[p] - arrayB[val])
.forEach(p -> op(p, val, arrayK[p][val] - arrayA[p] - arrayB[val]));
for (int i : mySet()) {
if (arrayA[i] == 0) {
zeroSet.add(i);
}
}
void op(int p, int val, int alpha){
cmpArray[p] = alpha;
arrayC[p] = val;
}
我无法并行化 HashSet-Function add()。这导致了一些奇怪的结果。谁能给我一个关键字,为了了解发生了什么,要寻找什么?有没有机会并行化这段代码?
我不想让你为我解决问题,只是为了检查我是否在正确的轨道上:-D
感谢您的回复。
最好的,山姆
【问题讨论】:
-
mySet() 是做什么的?
-
能否提供一个 mcve (stackoverflow.com/help/mcve)
标签: java parallel-processing java-stream hashset