java排序

devtools/2024/10/21 15:59:03/
  1. Comparator与Comparable

    1. 如果有一个类,希望支持同类型的自定义比较策略,可以实现接口Compareable

    2. 如果某个类,没有实现Compareable接口,但是又希望对他进行比较,则可以自定义一个Comparator,来定义这个类的比较规则

    3. java">public static class People implements Comparable<People>{int code;int age;public people(int code,int age){this.code = code;this.age = age;}@Overridepublic int compareTo(People p){if(code == p.code){return 0;}else if(code < p.code){return -1;}else{return 1;}}
      }
      
    4. People类实现了Comparable接口,因此可以直接调用list.sort(null)或者CollectionUtils.sort(list)来进行比较,如果希望实现针对people类的age字段,进行升序排列,那么可以使用Comparator来实现

    5. java">@Test
      public void testDemoSort(){List<People> list = new ArrayList<>();list.add(new People(10,30));list.add(new People(12,10));list.add(new People(11,20));//默认根据code进行升序比较list.sort(null);list.sort(new Comparator<People>(){@Overridepublic int compare(People p1,People p2){if(p1.age == p2.age){return 0;}else if(p1.age < p2.age){return -1;}else{return 1;}}});
      }
      
    6. 简洁实现,但是有致命问题,可能会溢出

      1. java">list.sort(new Comparator<People>{@Overridepublic int compare(People p1,People p2){return p1.age - p2.age;}
        });
        
    7. 使用基础类的compare方式,防止溢出

      1. java">list.sort(new Comparator<People>(){@Overridepublic int compare(People p1,People p2){return Integer.compare(p1.age,p2.age);}
        });
        
      2. java">//在1.8中,可以简化:
        list.sort(Comparator.comparingInt(p->p.age));
        
    8. 倒序排列

      1. 调换位置

        1. java">list.sort(new Comparator<People>(){@Overridepublic int compare(People p1,People p2){return Integer.compare(p2.age,p1.age);}
          });
          
      2. jdk1.8使用负数

        1. java">list.sort(Comparator.comparingInt(p->-p.age));
          

http://www.ppmy.cn/devtools/127602.html

相关文章

【C++刷题】力扣-#88-合并两个有序数组

题目描述 给定两个有序整数数组 nums1 和 nums2&#xff0c;其中 nums1 的长度为 m&#xff0c;nums2 的长度为 n。假设 nums1 的大小等于 m n&#xff08;即 nums1 有足够的空间存放 nums2 的元素&#xff09;。你需要将 nums2 合并到 nums1 中&#xff0c;使合并后的数组仍然…

双十一购物节有哪些好物值得入手?2024双十一好物清单合集分享

一年一度的双十一购物狂欢节即将来临&#xff0c;各大平台纷纷开启预热活动&#xff0c;伴随着品牌的疯狂折扣和满减优惠&#xff0c;众多商品即将迎来超值的价格。现在正是大家“剁手”换新装备的大好时机。作为一名深耕智能产品多年的资深达人&#xff0c;今天这期我将从不同…

CMOS 图像传感器:像素寻址与信号处理

CMOS image sensor : pixel addressing and signal processing CMOS image sensor 对于寻址和信号处理有三种架构 pixel serial readout and processingcolumn parallel readout and processingpixel parallel readout and processing 其中&#xff0c;column parallel reado…

后端技术:有哪些常见的应用场景?

篇一、 原文链接&#xff1a;https://www.zhihu.com/question/642709585/answer/3388752666 1、数据处理和存储 后端技术可用于处理和存储大量数据&#xff0c;例如构建数据库系统、设计高效的数据结构、实现算法等。常见的数据库技术有关系型数据库&#xff08;如MySQL、O…

架构设计笔记-19-大数据架构设计理论与实践

知识要点 案例分析 1.Lambda架构优缺点 2.web架构设计 3.web系统架构设计相关技术 论文

Git下载及安装教程(简单易懂)

一、Git的下载 1.下载方式 这里提供Git官网和阿里云镜像下载两种方式&#xff0c;这里博主用的是阿里云镜像&#xff0c;速度快。 Git官网https://git-scm.com/阿里云镜像https://registry.npmmirror.com/binary.html?pathgit-for-windows/ 二、Git的安装 1.下载完成后&a…

laydate.laydate.render()开始日期和结束日期选择器互相限制选择值动态生效

要解决 先选定结束日期时&#xff0c;开始日期无法受到限制 的问题&#xff0c;需要确保在初始化选择器时&#xff0c;开始日期选择器 在选择结束日期时也会根据选定的结束日期来更新。 核心问题&#xff1a; 目前&#xff0c;当选定结束日期时&#xff0c;开始日期选择器的 …

龙兴物联一体机:设备监测的智能先锋

龙兴物联物联网一体机的崛起 龙兴物联物联网一体机在设备监测领域占据着至关重要的地位。随着科技的不断进步和各行业对设备监测需求的日益增长&#xff0c;龙兴物联物联网一体机以其卓越的性能和广泛的适用性&#xff0c;迅速崛起并成为众多企业和机构的首选。 在当今数字化时…