java中sort排序_数据结构算法总结

java中sort排序_数据结构算法总结数组Sort排序正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序int[]array={10,3,6,1,4,5,9};Arrays.sort(array);降序排序:先将数组Arrays.asList()转为集合,然后使用Collections.reverse()反转集合,注意如果是基础数据类型(不是数据包装类),不能使用Arrays.asList()方法可以使用Guava的Int..


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  1. 数组Sort排序

    正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序

    int[] array = { 
         10, 3, 6, 1, 4, 5, 9};
    Arrays.sort(array);
    

    降序排序:先将数组Arrays.asList()转为集合,然后使用Collections.reverse()反转集合,注意如果是基础数据类型(不是数据包装类),不能使用Arrays.asList()方法可以使用Guava的Ints.asList()方法代替

    Integer[] array = { 
         10, 3, 6, 1, 4, 5, 9};
    Arrays.sort(array);
    List<Integer> list = Arrays.asList(array);
    Collections.reverse(list);//冒泡 交换
    
  2. 简单集合Sort排序

    说明:主要是对jdk类库中的包装类排序,例如:Integer、String等,这些类都已经重写了Compare方法,都有默认排序规则

    常规方式:

    List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9));
    // 升序
    Collections.sort(list);
    // 降序
    Collections.sort(list, Collections.reverseOrder());
    

    lambda方式:

    // 升序
    List<Integer> collect = list.stream().sorted().collect(Collectors.toList());
    // 降序
    List<Integer> collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
    
    lists.sort((o1,o2)->o1.getAge()-o2.getAge());
    lists.sort(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName));
    
    
  3. 对象集合Sort排序

    lambda方式:排序值不能为null

    //方法二:使用stream sorted方法 
     list=list.stream().sorted((s2,s1 )->s1.getShowOrder().compareTo(s2.getShowOrder())).collect(Collectors.toList());
    //方法三:使用jdk8的sort方法
     list.sort((s2,s1)->s1.getShowOrder().compareTo(s2.getShowOrder()));
    //方法四:总结
        Arrays.sort(array, (v1, v2) -> v1[0] - v2[0]);
        Collections.sort(list, (o1,o2)->o1[0]-o2[0]);
        list.sort((o1, o2) -> o1[0] - o2[0]);
    

    Comparable方式:在实体中实现Comparable<实体>接口,重写compareTo方法,缺点不灵活

    public class Student implements Comparable<Student> { 
         
    	private String name;
    	private Integer age;
    
    	public int compareTo(StudentAsc o) { 
         
      		if(null == this.age) { 
         
          		return -1;
      		}
      		if(null == o.getAge()) { 
         
          		return 1;
      		}
      		return this.age.compareTo(o.getAge());
    	}
    }
    

    Comparator方式:使用Collections.sort(List list, Comparator<? super T> c)方法来实现相对上面来说灵活很多

    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 o1.getAge().compareTo(o2.getAge());
     	}
    });
    
  4. Sort方法详解(待补充)

    说明:Collections.sort方法底层就是调用的array.sort方法,根据数据大小的不同会使用插入排序、归并排序、快速排序(后两种排序算法都是分治思想)

参考:
https://blog.csdn.net/whp1473/article/details/79678974
https://blog.csdn.net/MrLiar17/article/details/89188038

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169884.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tcp四次挥手,为什么是四次?「建议收藏」

    tcp四次挥手,为什么是四次?「建议收藏」四次挥手的原因;为什么要有TIME_WAIT状态?2MSL的的意义;四次挥手中如果有一次挥手失败怎么处理?

    2022年5月5日
  • 装上这 8 个插件,PyCharm才真的是无敌的存在!

    装上这 8 个插件,PyCharm才真的是无敌的存在!给IT入门加星标,提升编程技能ChinesePlugin经常听到很多初学者抱怨说,PyCharm怎么是全英文的?学起来好难啊。在以前,我会跟他们说,学习编程语言,英文是一项非常重要的能…

    2022年6月24日
  • 函数指针,指针函数,返回值为指针的函数「建议收藏」

    函数指针,指针函数,返回值为指针的函数「建议收藏」在学习C语言时,一个比较容易混淆的概念就是函数指针、指针函数、返回值为指针的函数。本文将对这三个概念进行区分。指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同。函数指针就是一个指向函数的指针,本质上是一个指针,只是这个指针指向的对象是函数,而不是一般意义上的存储对象。

    2022年6月22日
  • Linux下安装mysql-5.7.30详细步骤[通俗易懂]

    Linux下安装mysql-5.7.30详细步骤[通俗易懂]前言下面记录了我在Linux环境下安装Mysql的完整过程,实操记录,只为让更多人少踩坑,本次安装版本为:mysql-5.7.30,64位操作系统官网下载地址:mysql-5.7.30-el7-x86_64.tar.gz1、安装前准备检测系统是否自带mysql[root@localhost/]#rpm-qa|grepmysql如果是,则使用下面命令进行删除:[root@localhost/]#rpm-e–nodeps‘上一步查找的名称’删除成功后,查询所

    2022年5月8日
  • 设置PyCharm使用Anaconda的环境[通俗易懂]

    设置PyCharm使用Anaconda的环境[通俗易懂]设置PyCharm使用Anaconda的环境PyCharm的安装以及Anaconda的安装和环境的新建这里就不做赘述了。为每一个PyCharm中的project设置特定的编译器及资源路径在PyCharm中新建一个project后,该项目的默认编译器应该是系统默认的python.exe。为了选择特定的编译环境,我们需要个性化设置一下。首先点击菜单栏中的File,打开Settings。在Pr…

    2022年8月28日
  • SheetJS中文文档-js导出Excel脚本库[通俗易懂]

    SheetJS中文文档-js导出Excel脚本库[通俗易懂]转载自GITHUB用户rockboom的翻译文档SheetJs下载:GITHUB地址|CSDN下载地址SheetJSjs-xlsxSheetJS是用于多种电子表格格式的解析器和编写器。通过官方规范、相关文档以及测试文件实现简洁的JS方法。SheetJS强调解析和编写的稳健,其跨格式的特点和统一的JS规范兼容,并且ES3/ES5浏览器向后兼容IE6。目前这个是社区版,我们也提供了性能增强的专业版,专业版提供样式和专业支持的附加功能。

    2022年5月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号