Java集合最简单实用的排序方法,不容置疑!

文章介绍了如何根据实体类的某个字段使用compareTo方法进行排序,展示了List的sort方法正序和倒序排序的实现,并解析了sort方法的底层源码,该方法基于归并排序,对于部分有序的数据能有效减少比较次数。此外,还强调了sort方法的稳定性以及在处理链表排序时的性能优势。
摘要由CSDN通过智能技术生成

 根据实体类的某个字段进行排序,推荐使用!

源码中通过compare(list [ i - 1 ], list [ i ]) 形式调用该方法,当其的返回值大于0时,list [ i - 1 ] 将与 list [ i ] 交换位置

o1.getSort().compareTo(o2.getSort())),用o1的值去比较o2的值,如果返回的int类型的值小于0则不更换位置,反之则更换位置!

List<实体类> result =new ArrayList<>();
result.sort((o1, o2) -> o1.getSort().compareTo(o2.getSort())); //正序
result.sort((o1, o2) -> o2.getSort().compareTo(o1.getSort())); //倒序

 观察 sort方法的底层源码,该方法通过toArray()方法将List集合转换为数组类型,再调用Arrays.sort()方法对数据进行排序,最后通过迭代器将排序后的数组里的数据重新写入集合中。

@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
 }

sort方法实施要求:
默认实现获取一个包含此列表中所有元素的数组,对该数组进行排序,并在此列表上迭代,从数组中的相应位置重置每个元素。(这避免了由于尝试对链表进行排序而导致的n2 log(n)性能。)
sort方法注意:
这种实现是一种稳定的、自适应的、迭代的归并排序,当输入数组部分排序时,它需要的比较次数远少于n lg(n)次,而当输入数组随机排序时,它提供了传统归并排序的性能。如果输入数组接近排序,则实现大约需要n次比较。临时存储需求从几乎排序的输入数组的一个小常量到随机排序的输入数组的n/2个对象引用不等。
sort方法实现在其输入数组中同样利用升序和降序,并且可以在同一输入数组的不同部分中利用升序和降序。它非常适合合并两个或多个排序数组:只需将数组连接起来并对结果数组进行排序。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值