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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。