java中的list排序问题

本文对比分析了Java中三种List排序方法:传统排序、串行排序和并行排序,通过实验展示了不同方法在百万级别和千万级别数据集上的性能表现,特别关注了加入比较器后串行与并行排序的效率差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法进行排序,并行时间是串行时间的一半,但是加入比较器整体排序时间下降了很多,一下是千万级排序数据,仅供参考,希望大家多多交流,批评指正。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值