java中的arrays.sort()代码详解

  

数组。排序(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()代码详解