当前位置:   article > 正文

Java Sort方法

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++;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二 关于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());
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/67448
推荐阅读
相关标签
  

闽ICP备14008679号