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..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数学建模中的选址问题_数学建模停车场规划问题

    数学建模中的选址问题_数学建模停车场规划问题选址问题:是指在规划区域里选择一个或多个设施的位置,使得目标最优。四个要素:设施、规划区域、位置(距离)、目标设施:按照设施的空间维度划分,可以将选址问题分为:1.立体选址问题:设施的高度不能被忽略,如集装箱装箱问题。2.平面选址问题:设施的长、宽不能被忽略,如货运站的仓位布局问题。3.线选址问题:设施的宽度不能被忽略,如在仓库两边的传送带布局问题。4.点选址问题:设施可以…

  • [医疗信息化][DICOM教程]DICOM标准简介[通俗易懂]

    [医疗信息化][DICOM教程]DICOM标准简介[通俗易懂][医疗信息化][DICOM教程]DICOM标准简介使用OsiriX的DICOM标准简介内容介绍什么是DICOM医院系统内的图像传输了解DICOM服务OsiriX提供的DICOM服务其他DICOM服务DICOM文件格式DICOM结构化报告符合DICOMDICOM与其他标准的互操作性结论介绍这是我有关DICOM标准的系列文章的一部分,并快速概述了DICOM标…

  • tk.mapper_需求分析4个步骤

    tk.mapper_需求分析4个步骤引言  Mybatis支持@SelectProvider注解,tkMapper正是运用了该技术,通过解析持久类,拼接xml形式的SQL语句,重新为MappedStatment设置SqlSource实现功能。核心配置<beanclass=”tk.mybatis.spring.mapper.MapperScannerConfigurer”>&l…

  • x390拆机图解_Thinkpadx390详细拆机图解

    x390拆机图解_Thinkpadx390详细拆机图解技术文档主体内容:可以认为是页面最想表达的内容总和。对于内容详情页来说,主体内容指从标题开始至正文内容结束,翻页区域也被视为主体内容,文章后的评论、分享、推荐等不视为主体内容。首屏:用户点击搜索结果后进入移动页面,不滑动屏幕即看到的所有内容,称为首屏。一屏:用户滑动屏幕至主体内容展现结束之前,在页面任意位置停留时看到的所有内容,称为一屏。移动端适配:为了使PC页面能够在移动端正常展现的手段,保证用…

  • JVM内存结构详解

    JVM内存结构详解文章目录一、你了解JVM内存模型吗在这之前需要知道JVM内存模型图——JDK1.81.1、程序计数器1.2、Java虚拟机栈(Stack)1.1.1、java.lang.StackOverflowError问题1.3、本地方法栈1.4、元空间(MetaSpace)1.4.1、MetaSpace相比PermGen的优势1.5、Java堆(Heap)二、JVM三大性能调优参数-Xms-Xmx-X…

  • phpstorm2021.4 激活码破解方法

    phpstorm2021.4 激活码破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

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