数组。排序(T[],比较器& lt;& # 63;超级T比;c)方法用于对象数组按用户自定义规则排序。
官方Java文档只是简要描述此方法的作用,并未进行详细的介绍,本文将深入解析此方法。
<强> 1。简单示例强>
排序方法的使用非常的简单明了、下面的例子中,先定义一个比较大狗小的比较器,然后将其实例对象作为参数传给这种方法,通过此示例,你应该能够快速掌握Arrays.sort()的使用方法。
进口java.util.Arrays; 进口java.util.Comparator; 狗类{ int大小; 公共的狗(int) { 大?s; } } 类DogSizeComparator实现Comparator输出为:
2 1 3 1 2 3<强> 2。使用策略模式强>
这是策略模式(Strategypattern)的一个完美又简洁的示例,值得一提的是为什么这种场景下适合使用策略模式。
总体来说,策略模式允许在程序执行时选择不同的算法比。如在排序时,传入不同的比较器(比较),就采用不同的算法。
根据上面的例子,假设你想要根据狗的重量来进行排序,可以像下面这样,创建一个新的比较器来进行排序:
狗类{ int大小; int重量; 公共狗(int, int w) { 大?s; 重量=w; } } 类DogSizeComparator实现Comparator执行结果:
大?2重量=50大?1重量=30重量大?3=40 大?1=30重量大?2重量=50重量大?3=40 大?1重量=30重量大?3=40尺寸=2重量=50比较器是一个接口,所以这种方法中可以传入任意实现了此接口的类的实例,这就是策略模式的主要思想。
<强> 3。为何使用“超级”强>
如果使用“Comparator
c”那是很简单易懂的,但是排序的第2个参数里面的& lt; & # 63; superT>意味着比较器所接受的类型可以是T或者它的超类。为什么是超类呢& # 63;答案是:这允许使用同一个比较器对不同的子类对象进行比较,在下面的示例中很明显地演示了这一点: 进口java.util.Arrays; 进口java.util.Comparator; 类动物{ int大小; } 狗类动物{延伸 公共的狗(int) { 大?s; } } 猫类动物{延伸 公共的猫(int) { 大?s; } } 类AnimalSizeComparator实现Comparatorjava中的arrays.sort()代码详解