比较器(算法中排序)

方式一:不常用

让实体类实现Comparable接口,泛型是需要比较的类型,同时重写compareTo方法

缺点:对代码有侵入性。

public class Student implements Comparable<Student> {private String name;private double score;// 构造函数和其他方法省略@Overridepublic int compareTo(Student other) {return Double.compare(this.score, other.score); // 比较成绩}
}

重点:方式二:重写Comparator接口

 注意,这里compare方法,返回值是int,所以如果是比较非int类型的数据,记得先转换成int。

        String[] strings = {"123", "456"};Arrays.sort(strings,new Comparator<String>(){@Overridepublic int compare(String o1, String o2) {return Integer.parseInt(o1)-Integer.parseInt(o2);}});

对于compare方法:详见下面的二分搜索源码 

pivot是当前需要被插入进去的数,a[mid]是原数组中的中间值,这个过程通过二分(数组是有序的)快速找到被插入进去的点,如果被插进去的值(新值)比中间值(旧值)小,则移动右指针(right = mid ,说明插入点在中间值的左边,因为mid = (left+right)/2 ),反之,在右边,移动左指针(left = mid+1)
当然,这里逻辑是基于比较器的,如果重写了,(默认升序,重写为降序),就完全相反了。

比如上面图:默认是o1 - o2 ,即新值如果小于旧值,移动右指针,插在左边。升序。
如果重写,即o2 - o1,即新值如果小于旧值,移动左指针,插在右边。降序。

if(c.compare(pivot,a[mid]) < 0) 其中 c是比较器,pivot是将要被插入的元素(新值),a[ mid ]是数组中,正在被二分查找比较的元素,我们重写比较器,其实也就是人为的改变走向,让本该去if分支的去了else,else的去到了if分支,进而改变左指针or 右指针的移动,进而改变了相对插入点的位置,左边or 右边,进而达到了升序or 降序。

默认升序!!! o1 - o2,如果需要改完降序,则反过来即可。

对于一个二维数组:其实就是很多个一维数组放一起

我们取每个二维数组的第一维(行),比较第一个元素,即10,2,1,6。

 int[][] points = {{10, 16}, {2, 8}, {1, 6}, {6, 12}};// 对二维数组按照每行数组的第一个元素进行排序Arrays.sort(points, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {// 按照从小到大排序return o1[0] - o2[0];}});

 如果说,第一个元素,相等,我们也可以比较第二个元素....

 Arrays.sort(points, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {// 按照从小到大排序if(o1[0]!=o2[0]) {return o1[0] - o2[0];}else{return o1[1] -o2[1];}}});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/431635.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 基于SpringBoot框架的网上蛋糕销售系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

基于springboot+vue的新闻推荐系统

基于springbootvue的新闻推荐系统 摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了新闻推荐系统的开发全过程。通过分析企业对于新闻推荐系统的需求&#xff0c;创建了一个计算机…

探索AI编程新境界:aider库揭秘

文章目录 **探索AI编程新境界&#xff1a;aider库揭秘**背景&#xff1a;为何选择aider&#xff1f;简介&#xff1a;aider是什么&#xff1f;安装指南&#xff1a;如何安装aider&#xff1f;功能演示&#xff1a;aider的简单用法实战应用&#xff1a;aider在不同场景下的使用常…

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

写一个智慧物流园区的提货滚动看板系统

先看效果&#xff1a; 需求分析 作为5A级智慧物流园&#xff0c;每天几百辆的车流量&#xff0c;前台人工查询效率慢&#xff0c;客户急需解决客户查询货单慢的问题提升效率&#xff0c;减少车辆堵塞 第一步编写接口读取数据库数据&#xff1a; 第二步写前端展示代码&#xff1…

AI 文生图快速入门教程:让 Stable Diffusion 更易于上手

Stable Diffusion 是一个强大的 AI 图像生成工具&#xff0c;但它可能会消耗大量资源。在本指南中&#xff0c;我们将学习如何使用 AUTOMATIC1111 的 Stable Diffusion WebUI 来设置它。同时&#xff0c;我们将在 DigitalOcean GPU Droplet 云服务器上运行它&#xff0c;通过 H…

虚拟硬盘数据恢复(vmdk、vdi、vhd等虚拟磁盘文件)

我们用的虚拟机有时候用着用着就启动不起来了&#xff0c;可能是操作系统启动扇区出了问题或者硬盘数据损坏。如果还有重要的数据文件在虚拟机里面&#xff0c;不要慌&#xff0c;一般只是操作系统的问题&#xff0c;硬盘里面的文件一般是不会丢失损坏的&#xff0c;即使磁盘有…

UE学习篇ContentExample解读------Blueprint_Communication-下

文章目录 总览描述批次阅览2.1 Using an Event Dispatcher function to call an event in the level Blueprint2.2 Binding an Event Dispatcher function to a custom event2.3 Binding an Event Dispathcer to a custom event on spawn3.1 Basic communication using a Bluep…

jQuery——函数的使用

1、作为一般函数调用&#xff1a;$ ( param ) ① 参数为函数&#xff1a;当 DOM 加载完成后&#xff0c;执行此回调函数 ② 参数为选择器字符串&#xff1a;查找所有匹配的标签&#xff0c;并将它们封装成 jQuery 对象 ③ 参数为 DOM 对象&#xff1a;将 DOM 对象封装成 jQu…

828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter

在追求创新与效率并重的今天&#xff0c;我们公司迎难而上&#xff0c;决定自主搭建一款短视频生成AI工具——MoneyPrinter&#xff0c;旨在为市场带来前所未有的创意风暴。面对服务器选择的难题&#xff0c;我们经过深思熟虑与多方比较&#xff0c;最终将信任票投给了华为云Fl…

SW - 将装配体保存成零件给其他装配体用

文章目录 SW - 将装配体保存成零件给其他装配体用概述笔记将子装配图另存为零件给其他装配图用打开另存后的零件图END SW - 将装配体保存成零件给其他装配体用 概述 想做一个散料飞达物料的布局图&#xff0c;初步想法是整一个装配体&#xff0c;然后出工程图标注上散料飞达料…

频谱分析仪:射频领域的多面手

频谱分析仪&#xff0c;作为射频领域的中心工具&#xff0c;其重要性不言而喻。它主要分为实时分析式和扫频式两大类&#xff0c;各自以其独特的方式在信号处理领域发挥着关键作用。实时分析式频谱仪能够即时捕获并分析非重复性、持续时间极短的信号&#xff0c;为科研人员提供…

Mybatis自定义TypeHandler,直接存储枚举类对象

在这篇文章中&#xff0c;我们已经知道如何使用枚举类直接接受前端的数字类型参数&#xff0c;省去了麻烦的转换。如果数据库需要保存枚举类的code&#xff0c;一般做法也是代码中手动转换&#xff0c;那么能不能通过某种机制&#xff0c;省去转换&#xff0c;达到代码中直接保…

C#知识|认识简单工厂的设计模式

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 最近了解到一个概念信创&#xff0c;即信息技术应用创新产业&#xff0c;是国产化的一个阶段&#xff0c;为了实现信息技术自主可控&#xff0c;规避被外部卡脖子的风险&#xff1b; 随着信创产业的发展&#xff0c;逐…

[附源码]宠物领养管理系统+SpringBoot

今天带来一款优秀的项目&#xff1a;宠物领养管理系统源码 。 系统采用的流行的前后端分离结构&#xff0c;内含功能包括"管理端"&#xff0c;“用户领养端”&#xff0c;“宠物管理”&#xff0c;“权限登录”等功能。 如果您有任何问题&#xff0c;也请联系小编&a…

高密原型验证系统解决方案(上篇)

0 引言 随着当今 SoC 设计规模的快速膨胀&#xff0c;仅仅靠几 颗当代最先进的 FPGA 已经无法满足原型验证的需求。简单的增加系统的容量&#xff0c;会遇到系统时钟复位同 步&#xff0c;设计分割以及高速接口和先进 Memory控制器 IP 验证等多重困难。此时&#xff0c;一个商用…

解决docker目录内存不足扩容处理

当我们使用docker时&#xff0c;经常会创建新镜像和新容器&#xff0c;在新容器中又会安装各种包&#xff0c;这些东西不是虚拟的&#xff0c;而是实实在在存于我们的磁盘中&#xff0c;默认在/var/lib/docker中&#xff0c;这个目录是属于系统盘的&#xff0c;而系统盘的空间往…

Spring Boot房屋租赁平台:现代化解决方案

1 绪论 1.1 研究背景 中国的科技的不断进步&#xff0c;计算机发展也慢慢的越来越成熟&#xff0c;人们对计算机也是越来越更加的依赖&#xff0c;科研、教育慢慢用于计算机进行管理。从第一台计算机的产生&#xff0c;到现在计算机已经发展到我们无法想象。给我们的生活改变很…

OpenHarmony标准系统mipi摄像头适配

OpenHarmony标准系统mipi摄像头适配 本文档以rk3568为例&#xff0c;讲述如何在OpenHarmony 标准系统rk设备上适配mipi摄像头。 开发环境 OpenHarmony标准系统4.1rrk3568设备摄像头ov5648,ov8858 文档约定&#xff1a;4.1r_3568为OpenHarmony标准系统源码根目录 1.适配准备:得…

DAMODEL丹摩智算平台实践CogVideoX

文章目录 前言 一、平台账号注册并登录 二、部署CogVideoX &#xff08;一&#xff09;简介 &#xff08;二&#xff09;部署 1. 创建实例 2. 配置环境和依赖 3.预制模型与配置文件 三、开始运行 总结 前言 该文章主要记录DAMODEL丹摩智算平台实践过程与心得体会&…