java中的list排序问题

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 22:20   35   0
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方法进行排序,并行时间是串行时间的一半,但是加入比较器整体排序时间下降了很多,一下是千万级排序数据,仅供参考,希望大家多多交流,批评指正。


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP