看到评论区常有人讨论 list.sort() 和 list.stream().sorted() 的性能差异。普遍共识是前者更快,但具体原因往往语焉不详。今天咱们不盲从结论,先问是不是,再问为什么。
真的更好吗?
先写个简单的 Demo 验证一下。
List<Integer> userList = new ArrayList<>();
Random rand = new Random();
for (int i = 0; i < 10000; i++) {
userList.add(rand.nextInt(1000));
}
List<Integer> userList2 = new ArrayList<>();
userList2.addAll(userList);
Long startTime1 = System.currentTimeMillis();
userList2.stream().sorted(Comparator.comparing(Integer::intValue)).collect(Collectors.toList());
System.out.println("stream.sort 耗时:" + (System.currentTimeMillis() - startTime1) + "ms");
Long startTime = System.currentTimeMillis();
userList.sort(Comparator.comparing(Integer::intValue));
System.out.println("List.sort() 耗时:" + (System.currentTimeMillis() - startTime) + "ms");
输出结果可能是:
stream.sort 耗时:62ms
List.sort() 耗时:7ms
看起来原生排序确实快很多。但如果交换顺序执行呢?
// ... 初始化代码同上 ...
Long startTime = System.currentTimeMillis();
userList.sort(Comparator.comparing(Integer::intValue));
System.out.println("List.sort() 耗时:" + (System.currentTimeMillis() - startTime) + );
System.currentTimeMillis();
userList2.stream().sorted(Comparator.comparing(Integer::intValue)).collect(Collectors.toList());
System.out.println( + (System.currentTimeMillis() - startTime1) + );


