java中的list排序问题 是一个比较常见的问题,在java8中又添加了stream集合类型,使得这个排序更加的丰富,下面我们一起来看一下一下三种list排序:
//传统的list排序
public static void listSort() {
List<String> list =createTestList();
long t0 = System.nanoTime();
Collections.sort(list, new SortComparator());
System.out.println(1000000);
long t1 = System.nanoTime();
long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);
System.out.println(String.format("traditional sort took: %d ms", millis));
}
public static List<String> createTestList() {
int max = 1000000;
List<String> values = new ArrayList<>(max);
for (int i = 0; i < max; i++) {
UUID uuid = UUID.randomUUID();
values.add(uuid.toString());
}
return values;
}
//应用stream的串行排序
public static void SerialSort() {
List<String> values = createTestList();
long t0 = System.nanoTime();
//Stream<String> stream = values.stream().sorted(new SortComparator());
long count = values.stream().sorted(new SortComparator()).count();
System.out.println(count);
long t1 = System.nanoTime();
long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);
System.out.println(String.format("sequential sort took: %d ms", millis));
}
//应用stream的并行排序
public static void parallelSort() {
List<String> values = createTestList();
long t0 = System.nanoTime();
long count = values.parallelStream().sorted(new SortComparator()).count();
System.out.println(count);
long t1 = System.nanoTime();
long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);
System.out.println(String.format("parallel sort took: %d ms", millis));
}
下面是实验结果:
由此可见,百万级别的数据进行排序过后,还是传统方式排序速度比较快,在加入比较器的stream排序中,并行排序的时间要比串行排序的时间长,但是如果加入比较器,调用java默认的sort方法进行排序,并行时间是串行时间的一半,但是加入比较器整体排序时间下降了很多,一下是千万级排序数据,仅供参考,希望大家多多交流,批评指正。