java中的list排序问题
2015-06-17 17:19
477 查看
java中的list排序问题 是一个比较常见的问题,在java8中又添加了stream集合类型,使得这个排序更加的丰富,下面我们一起来看一下一下三种list排序:
下面是实验结果:
由此可见,百万级别的数据进行排序过后,还是传统方式排序速度比较快,在加入比较器的stream排序中,并行排序的时间要比串行排序的时间长,但是如果加入比较器,调用java默认的sort方法进行排序,并行时间是串行时间的一半,但是加入比较器整体排序时间下降了很多,一下是千万级排序数据,仅供参考,希望大家多多交流,批评指正。
//传统的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方法进行排序,并行时间是串行时间的一半,但是加入比较器整体排序时间下降了很多,一下是千万级排序数据,仅供参考,希望大家多多交流,批评指正。
相关文章推荐
- java客户端和服务器程序
- POI 导出 java客户端 支持数据分页.
- java 原型模式之深复制与浅复制
- javabean总结
- Spring注解
- Java程序最容易犯的21种错误
- javascrip的call的使用
- Android Eclipse关联源码
- JAVA bean与XML互转的利器---XStream
- javascipt 实现继承
- Spring学习笔记之 Spring IOC容器(二)
- eclipse设置和优化
- spring+springMVC+Mybatis+dwz 开发
- Java上的try catch并不影响性能
- pharmdock并行运算的java实现
- Java并发编程-19-在执行器中延时执行任务和周期性执行任务
- java定义和实现接口
- 我的Java开发学习之旅------>System.nanoTime与System.currentTimeMillis的区别
- 在Eclipse在使用JUnit4单元测试(0基础知识)
- java.lang.outofmemoryerror:permgen space jvm内存溢出解决办法