您的位置:首页 > 编程语言 > Java开发

java中的list排序问题

2015-06-17 17:19 477 查看
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方法进行排序,并行时间是串行时间的一半,但是加入比较器整体排序时间下降了很多,一下是千万级排序数据,仅供参考,希望大家多多交流,批评指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: