java中的arrays.sort()代码详解
Arrays.sort(T[],Comparatorc)方法用于对象数组按用户自定义规则排序.
官方Java文档只是简要描述此方法的作用,并未进行详细的介绍,本文将深入解析此方法。
1.简单示例
sort方法的使用非常的简单明了,下面的例子中,先定义一个比较Dog大小的Comparator,然后将其实例对象作为参数传给sort方法,通过此示例,你应该能够快速掌握Arrays.sort()的使用方法。
importjava.util.Arrays;
importjava.util.Comparator;
classDog{
intsize;
publicDog(ints){
size=s;
}
}
classDogSizeComparatorimplementsComparator{
@Override
publicintcompare(Dogo1,Dogo2){
returno1.size-o2.size;
}
}
publicclassArraySort{
publicstaticvoidmain(String[]args){
Dogd1=newDog(2);
Dogd2=newDog(1);
Dogd3=newDog(3);
Dog[]dogArray={d1,d2,d3};
printDogs(dogArray);
Arrays.sort(dogArray,newDogSizeComparator());
printDogs(dogArray);
}
publicstaticvoidprintDogs(Dog[]dogs){
for(Dogd:dogs)
System.out.print(d.size+"");
System.out.println();
}
}
输出为:
213 123
2.使用策略模式
这是策略模式(Strategypattern)的一个完美又简洁的示例,值得一提的是为什么这种场景下适合使用策略模式.
总体来说,策略模式允许在程序执行时选择不同的算法.比如在排序时,传入不同的比较器(Comparator),就采用不同的算法.
根据上面的例子,假设你想要根据Dog的重量来进行排序,可以像下面这样,创建一个新的比较器来进行排序:
classDog{
intsize;
intweight;
publicDog(ints,intw){
size=s;
weight=w;
}
}
classDogSizeComparatorimplementsComparator{
@Override
publicintcompare(Dogo1,Dogo2){
returno1.size-o2.size;
}
}
classDogWeightComparatorimplementsComparator{
@Override
publicintcompare(Dogo1,Dogo2){
returno1.weight-o2.weight;
}
}
publicclassArraySort{
publicstaticvoidmain(String[]args){
Dogd1=newDog(2,50);
Dogd2=newDog(1,30);
Dogd3=newDog(3,40);
Dog[]dogArray={d1,d2,d3};
printDogs(dogArray);
Arrays.sort(dogArray,newDogSizeComparator());
printDogs(dogArray);
Arrays.sort(dogArray,newDogWeightComparator());
printDogs(dogArray);
}
publicstaticvoidprintDogs(Dog[]dogs){
for(Dogd:dogs)
System.out.print("size="+d.size+"weight="+d.weight+"");
System.out.println();
}
}
执行结果:
size=2weight=50size=1weight=30size=3weight=40 size=1weight=30size=2weight=50size=3weight=40 size=1weight=30size=3weight=40size=2weight=50
Comparator是一个接口,所以sort方法中可以传入任意实现了此接口的类的实例,这就是策略模式的主要思想.
3.为何使用”super”
如果使用“Comparator
importjava.util.Arrays;
importjava.util.Comparator;
classAnimal{
intsize;
}
classDogextendsAnimal{
publicDog(ints){
size=s;
}
}
classCatextendsAnimal{
publicCat(ints){
size=s;
}
}
classAnimalSizeComparatorimplementsComparator{
@Override
publicintcompare(Animalo1,Animalo2){
returno1.size-o2.size;
}
//inthisway,allsubclassesofAnimalcanusethiscomparator.
}
publicclassArraySort{
publicstaticvoidmain(String[]args){
Dogd1=newDog(2);
Dogd2=newDog(1);
Dogd3=newDog(3);
Dog[]dogArray={d1,d2,d3};
printDogs(dogArray);
Arrays.sort(dogArray,newAnimalSizeComparator());
printDogs(dogArray);
System.out.println();
//whenyouhaveanarrayofCat,sameComparatorcanbeused.
Catc1=newCat(2);
Catc2=newCat(1);
Catc3=newCat(3);
Cat[]catArray={c1,c2,c3};
printDogs(catArray);
Arrays.sort(catArray,newAnimalSizeComparator());
printDogs(catArray);
}
publicstaticvoidprintDogs(Animal[]animals){
for(Animala:animals)
System.out.print("size="+a.size+"");
System.out.println();
}
}
输出结果:
size=2size=1size=3 size=1size=2size=3 size=2size=1size=3 size=1size=2size=3
4.小结
与Arrays.sort()相关的信息总结如下:
通用:super类
策略设计模式(strategypattern);
归并排序(mergesort):时间复杂度n*log(n);
Java.util.Collections#sort(List
总结
以上就是本文关于Java中的Arrays.sort()代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他Java相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。