Stackoverflow上高热度问题,为什么对array排序后执行效率更高?代码如下:
import java.util.Arrays;
import java.util.Random;
public class Main
{
public static void main(String[] args)
{
int arraySize = 32768;
int data[] = new int[arraySize];
Random rnd = new Random(0);
for (int c = 0; c < arraySize; ++c)
data[c] = rnd.nextInt() % 256;
// Arrays.sort(data);
long start = System.nanoTime();
long sum = 0;
for (int i = 0; i < 100000; ++i)
{
for (int c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
sum += data[c];
}
}
System.out.println((System.nanoTime() - start) / 1000000000.0);
System.out.println("sum = " + sum);
}
}
Arrays.sort(data);的执行结果为 3.379117099 sum = 155184200000,注释之后执行结果为
11.622239618 sum = 155184200000
为什么?
下面的链接中已经翻译得很好了
浅谈分支预测、流水线与条件转移(转载) - Przz - 博客园
Stackoverflow链接:java - Why is processing a sorted array faster than processing an unsorted array? - Stack Overflow