Java Sort方法

Java的sort方法就是排序,而且排的是升序,你要想降序可以先获得升序的,然后倒过来或者你重新写比较器Comparator的接口就可以。

一 sort 排序方法本身
这里讲的sort方法,都是以Arrays类里面的方法为准,因为很多类的sort方法都是引用的Arrays类的方法,有的就是加一个比较器作为参数就完事了,比如说ArrayList的sort方法。

以下是ArrayList的排序方法

   @Override
    @SuppressWarnings("unchecked")
    public void sort(Comparator<? super E> c) {
        final int expectedModCount = modCount;
        Arrays.sort((E[]) elementData, 0, size, c);
        if (modCount != expectedModCount) {
            throw new ConcurrentModificationException();
        }
        modCount++;
    }

二 关于sort采用什么排序方法
排序方法直接影响着排序的效率,但实际上sort方法排序方式不一定是固定的,可能根据调用的方法,或者是输入的数量大小(小的直接插入,大的归并之类的)。

以下是Arrays类的sort方法,光sort方法就很多个

(这里还要提一下parallelsort排序,就是并行排序,同样他和sort方法比较快慢,也要分情况可以根据这个公式:
parallelSort() = sort() / 核心数 + 聚合时间
来区分不仅要看采用的排序策略占用的时间,还要看本地主机的,本地主机单核心的话,实际上使用不使用ParallelSort都没啥必要

在这里插入图片描述
这里主要我们讨论的是sort常用的DualPivotQuicksort.sort方法,以下是DualPivotQuicksort不同数据量的数据才去的排序策略,这里面还会涉及到轴的选择
在这里插入图片描述
三 自定义比较器
自定义比较器Comparator,除了倒序之类的,可以自己添加定义,比如说你创建一个学生Student的类,你现在有一个List的列表你现在要根据里面的学生成绩来排序

例如:实际上就是定义了一个比较器,或者说重新实现了Comparator的接口

//降序排序
Student studentWang = new Student("王小二", 10);
Student studentZhang = new Student("张三", 1);
Student studentGou = new Student("狗子", 99);
Student studentZhao = new Student("赵六", 40);
Student studentLi = new Student("李四", null);
List<Student> students = new ArrayList<Student>(Arrays.asList(studentWang, studentZhang, studentGou, studentZhao, studentLi));
Collections.sort(students, new Comparator<Student>() {
    public int compare(Student o1, Student o2) {
        if(null == o1.getAge()) {
            return 1;
        }
        if(null == o2.getAge()) {
            return -1;
        }
        return o2.getAge().compareTo(o1.getAge());
    }
});
System.out.println("自定义对象,降序排序:");
for(Student student : students) {
    System.out.println(student.toString());
}
  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值