首页 > 编程语言 >重写Java中Arrays数组工具类提供的sort()排序函数中的比较器类Comparator的compare()方法!

重写Java中Arrays数组工具类提供的sort()排序函数中的比较器类Comparator的compare()方法!

时间:2023-11-17 16:12:28浏览次数:26  
标签:sort 器类 compare Comparator Arrays 排序 重写

排序方法是我们日常开发或者写功能函数,或者实现算法时,常调用的方法。
有时甚至,开发人员自己还要写一写排序算法。

今天,我们来修改Java官方提供的Arrays工具类中的静态排序sort()方法。

反问一下,为什么要重写呢? 官方提供的还不够你用?
回答:确实不够用,官方默认是对数字,特别是sort比较的是整型这种数字的大小 从而实现默认的有小到大的升序排序。

而有时候面临的情况,一般有两种:
case1: 需要降序排列
case2:有时候不是针对整型数组 或 数字进行排序 , 我想实现对类对象的排序!

先上源码:

这是一种常见的写法,默认为升序,因为是a-b

点击查看代码
Arrays.sort(a,new Comparator<>(){
		public int compare(int a, int b){
				return a-b;
		}
});

因此如果是需要降序排列,则将a-b改为b-a即可。

分析上述代码,实际上Arrays.sort()中有两个参数,第一个参数是你待排序的数组,第二个参数是Comparator比较器类的一个对象。
因此为了满足我们的排序需求,我们会重新这个类中的compare(type arg1 , type arg2)方法。

举个例子,比如我有一个类,如下:

public class structure{
      int val;
}

//以上述定义的类为类型,定义数组。
structure[] strArray = new structure[5];

//现在我要将上述数组中的structure类的对象根据其中的val属性的大小,
//进行降序排列,请你重写Comparator比较器类,传给数组工具类Arrays的静态方法sort();

//在使用这个Java提供的数组工具类时,需要导包。
import java.util.Arrays;

Arrays.sort(strArray , new Comparator<structure>(){
		public int compare(structure a , structure b)
		{
			return b.val - a.val;
		}
})

总结:

1.Java内置的静态方法Arrays.sort()默认是将数组调整为升序,它的代码中实现了Compareable接口的compare(a,b)方法,该方法用于比较两个元素的大小。
2.而它实现的compare(a,b)方法默认是这样的:若a>b,输出正数;若a<b,输出负数;若a=b,输出0。它的方法体实际代码为:return a-b;
3.若我们将compare(a,b)方法重写,相比原先默认的,将它的输出值的正负符号取反;

上述重写代码中,我们相当于将类的对象实例化和这个Comparator比较器类中的compare方法重写都编写到一起完成。有匿名内部类的意思,这个重写修改,这在那一次使用中有效。
因此,在以后的算法题或编写功能函数需要时,请记住如此操作即可。当然还有非常简便的写法就是使用Lambda表达式进行改写。

标签:sort,器类,compare,Comparator,Arrays,排序,重写
From: https://www.cnblogs.com/zxLai/p/17838988.html

相关文章

  • 使用Linux命令sort及uniq对文件或屏幕输出进行分组统计
    sortdemo.txt|uniq-c|sort-rn|head-3在日常Linux操作常常需要对一些文件或屏幕数次中重复的字段进行分组统计。实现的方法非常简单,核心命令为:sort|uniq--c|sort-rn。sort:对指定列进行排序,使该列相同的字段排练到一起uniq-c:uniq命令用于检查及删除文本文件......
  • 入门c语言--3---关于qsort函数的一些理解
     qsort函数是c语言库函数的一种,作用是将所给的数组中的元素按要求进行排序。 qsort函数可以理解为冒泡函数的进阶,冒泡函数只能对一些如int,char等类型的数组进行排序,当遇到自主定义的struct类型的数组时便不能进行排序。此时便可以通过qsort函数进行排序。  在使用qsort函数......
  • 必须为接口 System.Collections.IComparer 实现
    C#codes:publicclassDateComparer:IComparer{publicintCompare(objectx,objecty){if((xasRadDate).Date<(yasRadDate).Date){return-1;}elseif(......
  • Unsafe.compareAndSwapLong方法
    compareAndSwapLong方法是一个原子操作,通常用于并发编程中的无锁算法。它的作用是以原子比较方式比较并交换某个对象的一个long类型的字段。4个参数:1.Objectobj:需要操作的对象。2.longoffse:obj中要操作的字段的内存偏移量。3.longexpected:预期的值,用于比较。4.longupdated:......
  • sortablejs拖拽功能
    官网:http://www.sortablejs.com/中文文档:https://www.itxst.com/sortablejs/neuinffi.htmlgithub地址如下:https://github.com/SortableJS/react-sortablejsimportReact,{FC,useState}from'react';import{ReactSortable}from'react-sortablejs';......
  • Princeton Algorithms, Part I week2 Merge Sort
    Mergesort今天学习mergesort这个排序算法的思想就是,不停的将数组二分,再将两个子数组不停归并。其中有一个操作叫merge如下图所示。左右两边两个部分是有序的,然后思想也很简单有两个指针i和j,i指向lo,j指向mid+1,然后比较两个指针所指的大小,如果小就选出来排到数组中,如果i大于mid......
  • 无涯教程-Dart - compareTo函数
    它返回一个整数,指示两个数字之间的关系。compareTo-语法Number.compareTo(x)x  - 代表一个数字。compareTo-返回值返回值-0  - 如果值相等。1  - 如果当前数字对象大于指定的数值。-1 - 如果当前数字对象小于指定的数字值。compareTo-......
  • shell脚本之“sort“、“uniq“、“tr“、“cut“、“split“、“paste“以及“eval“
    一、sort命令1.1、作用以行为单位对文件内容进行排序也可以根据不同的数据类型来排序1.2、语法格式sort[选项]参数catfile|sort选项1.3、常用选项-f∶忽略大小写,会将小写字母都转换为大写字母来进行比较;-b∶忽略每行前面的空格;-n∶按照数字进行排序;-r∶反向......
  • 表格数据拖拽排序 sortable.js
    需求拖拽表格的行数据,实现排序。问题拖拽后调用接口,但视图没变,还是原来的顺序场景:拖拽表格行数据后,tableDataArr中数据的orderNum值会改变,实现拖拽换序。期望情况:页面根据更改后的orderNum重新排序。实际情况:接口数据变了,但是页面行数据没有改变。也就是说,页面没有实现......
  • [LeetCode] 2785. Sort Vowels in a String
    Givena0-indexedstrings,permutestogetanewstringtsuchthat:Allconsonantsremainintheiroriginalplaces.Moreformally,ifthereisanindexiwith0<=i<s.lengthsuchthats[i]isaconsonant,thent[i]=s[i].Thevowelsmustbes......