我正在阅读有关Java 8新功能的内容,其中之一是新的Arrays.parallelSort()方法。我对双精度数组和字符串数组进行了排序测试,发现对于字符串数组,parallelSort速度较慢。
下面是一个字符串排序测试方法的内容:
final int size = 10000;
final String[] values1 = new String[size];
final String[] values2 = new String[size];
for (int i = 0; i < size; i++) {
values1[i] = Integer.toString(i);
values2[i] = values1[i];
}
Collections.shuffle(Arrays.asList(values1));
Collections.shuffle(Arrays.asList(values2));
final Comparator<String> comparator = (o1, o2) -> o2.compareTo(o1);
long startTimeInNano = System.nanoTime();
Arrays.sort(values1, comparator);
long endTimeInNano = System.nanoTime();
System.out.println("Arrays.sort: totalTimeInMicro= " + ((endTimeInNano - startTimeInNano)/1000));
//parallel sort with java 8
startTimeInNano = System.nanoTime();
Arrays.parallelSort(values2,comparator);
endTimeInNano = System.nanoTime();
System.out.println("Arrays.parallelSort: totalTimeInMicro= " + ((endTimeInNano - startTimeInNano)/1000));
结果如下:
结果为:
Arrays.sort:totalTimeInMicro= 11993
Arrays.parallelSort:totalTimeInMicro= 89823
我还在另一台计算机上尝试了这段代码,结果是一样的(25608 vs 808660)。我运行测试的计算机使用的是i5-2500 CPU。您有任何想法为什么会得到这种结果吗?
Arrays.parallelSort()
使用fork-join
框架。因此它直接与系统上的核心数相关(因此它是架构相关的)。i-5 有4个内核,所以理论上parallel sort
应该更快。"1000"
<"2"
。 - biziclop