4.9 深入理解Arrays.sort(T[],Comparator<? super T>c)
发布网友
发布时间:2023-04-22 13:54
我来回答
共1个回答
热心网友
时间:2023-10-19 21:21
Arrays.sort(T[],Comparator<? super T>c)是一种用于对用户定义的对象数组进行排序的方法。官方的Java Doc 简单地描述它做了什么,但不是深入立即。在这篇文章中,我将介绍关键信息,以便更深入地介绍这种方法。
通过阅读下面的例子,你可以对如何使用这个方法有个正确的认识。定义一个比较器,用于按照狗的尺寸来比较大小,然后比较器用排序方法的参数。
输出:
这是一个很好使用策略模式的例子,值得注意的是为什么策略模式在这里会比较适合。简而言之,策略模式准许在运行时候选择不同的算法。在这种情况下,通过传递不同的比较器,可以选择不同的算法。基于上面的例子,假若你有另外一个比较器,比较狗的重量而不是大小,你可以简单地创建一个新的比较器,如下:
Comparator 仅仅是个接口,任何实现这个接口的比较器都可以在运行时候被使用。这是策略模式的关键思想。
如果直接用Comparator<T> c 作为参数,第二个参数是"Comparator<? super T> c" <? super T>意味这类型可以是T或者它的父类型。为什么准许父类型。答案是:
这种方法准许为所有的子类使用相同的比较器。以下的示例是明显的:
1、用通用父类。
2、策略模式。
3、合并排序-nlog(n)时间复杂度。
4、Java.util.Collections.sort(List <T> list,Comparator <?super T> c)与Arrays.sort有类似的思想。
Arrays.sort的用法
1.sort(byte[] a)对指定的 byte 型数组按数字升序进行排序。sort(byte[] a, int fromIndex, int toIndex)对指定 byte 型数组的指定范围按数字升序进行排序。sort(char[] a)对指定的 char 型数组按数字升序进行排序。sort(char[] a, int fromIndex, int toIndex)对指定 char 型数组的指定范围...
Arrays.sortarrays.sort用法
sort(T[] a, Comparator c):使用指定的比较器对对象数组进行排序。 sort(T[] a, int fromIndex, int toIndex, Comparator c):根据比较器对指定范围的对象数组进行排序。每个方法的第二个和第三个参数(fromIndex和toIndex)允许你指定排序的范围,从fromIndex(包含)到toIndex(不包含),以对...
public static <T> void sort(T[] a, Comparator<? super T> c)
? super T 为所有T的超类 只用于参数 T[] a 表示数组
arrays.sort排序后保存结果
2、Arrays.sort(int[]a,intfromIndex,inttoIndex),这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序哦!3、publicstaticvoidsort(T[]a,intfromIndex,inttoIndex,Comparatorc),上面有一个拘束,就是排列顺序只能是从小到大,...
Java8 Arrays.sort() 传入Comparator比较器报错
因为没有传入集合的操作 那只是个数组工具不要难为人家了 public class Arraysextends Object 此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。此类中所含方法...
java中怎么 对数组里的 元素 按出现的顺序排序
其实这个用java.utils.Arrays这个对象里的sort(T[],Comparator)的这个方法就可以了。String[] words = new String[] { "apple", "dog", "apple", "dog", "apple", "cat", "cat", "dog", "lamb" }; Arrays.sort(words, String.CASE_INSENSITIVE_ORDER);这样words就已经被排序了。Plus:...
还是搞不明白compareTo()方法
在底层对集合进行排序将不再是用Arrays.mergeSort(Object[] src,Object[] dest,int low,int high,int off),而是是用Arrays.mergeSort(Object[] src,Object[] dest,int low,int high,int off,Comparator c),比较大小则是用了c.compare(dest[j-1], dest[j])。
一个有关java comparable接口实现的问题,本人初学java,问下下面程序...
修改main函数里面的Arrays.sort(t);为 Arrays.sort(t, new Comparator<TwoDimensionalShape>(){ public int compare(TwoDimensionalShape o1, TwoDimensionalShape o2) { return o1.getArea() > o2.getArea()? 1: -1;}});
java Comparable和Comparator理解
其实这个过程可以这么理解:一个实现了Comparable接口的类,它的实例才是具有可比性的,才能使用Array.sort这类工具排序。而Array.sort是怎么实现排序的呢?就是调用了实例的Compareto方法。现在来看输出结果:the age = 4,getAge = 2---① the age = 4,getAge = 1---② the age = 2,getAge ...
Java中怎么取出数组中某个单位的某个值进行排序?
sort(T[] a, Comparator<? super T> c)用这个函数,自定义comparator函数实现最后一个值排序 import java.util.Arrays;import java.util.Comparator;public class TestDengCha { public static void main(String[] agrs) { Student[] s = new Student[5]; s[0] = new Student("西西", 59...