Comparator 使用小结

本文详细介绍了 Java 中的 Comparator 接口,包括其基本概念、核心方法 compare 和 equals 的功能,以及如何通过实现该接口来自定义排序算法。此外,还提供了对自定义对象和中文字符串进行排序的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. java.util.Comparator
  2. 1:java.util.Comparator是一个接口,只包含两个方法:
  3. 方法摘要
  4. int
  5. compare(To1,To2)
  6. 比较用来排序的两个参数。
  7. boolean
  8. equals(Objectobj)
  9. 指示是否其他对象“等于”此Comparator。
  10. 2:在JDK中对java.util.Comparator的功能的解释为:“强行对某些对象collection进行整体排序”。
  11. 具体的实现是在compare(To1,To2)方法中自定义排序算法,然后将Comparator对象(实现了java.util.Comparator接口的对象)作为一个参数传递给欲排序对象collection的某些排序方法。某些排序方法指的是能够接受java.util.Comparator参数的方法,比如:java.util.Arrays的publicstaticvoidsort(Object[]a,Comparatorc)
  12. 3:典型例程:
  13. importjava.util.Comparator;
  14. publicclassByWeightComparatorimplementsComparator
  15. {
  16. /**
  17. *ComparetwoTrucksbyweight.CallbackforsortorTreeMap.
  18. *effectivelyreturnsa-b;ordersbyascendingweight
  19. *
  20. *@parampFirstfirstobjectatobecompared
  21. *
  22. *@parampSecondsecondobjectbtobecompared
  23. *
  24. *@return+1ifa>b,0ifa=b,-1ifa<b
  25. */
  26. publicfinalintcompare(ObjectpFirst,ObjectpSecond)
  27. {
  28. longaFirstWeight=((Truck)pFirst).weight;
  29. longaSecondWeight=((Truck)pSecond).weight;
  30. /*needsignumtoconvertlongtoint,(int)willnotdo!*/
  31. returnsignum(aFirstWeight-aSecondWeight);
  32. }//endcompare
  33. /**
  34. *Collapsenumberdownto+10or-1dependingonsign.
  35. *Typicallyusedincompareroutinestocollapseadifference
  36. *oftwolongstoanint.
  37. *
  38. *@paramdiffusuallyrepresentsthedifferenceoftwolong.
  39. *
  40. *@returnsignumofdiff,+1,0or-1.
  41. */
  42. publicstaticfinalintsignum(longdiff)
  43. {
  44. if(diff>0)return1;
  45. if(diff<0)return-1;
  46. elsereturn0;
  47. }//endsignum
  48. }//endclassByWeight
  49. 程序来源:http://mindprod.com/jgloss/comparator.html
  50. 4:以下程序演示了如何对自定义对象进行排序:
  51. packagemypack;
  52. importjava.util.Arrays;
  53. importjava.util.Comparator;
  54. publicclassComparatorTest{
  55. @SuppressWarnings("unchecked")
  56. publicstaticvoidmain(String[]args){
  57. Dogo1=newDog("dog1",1,5);
  58. Dogo2=newDog("dog2",2,4);
  59. Dogo3=newDog("dog3",3,3);
  60. Dogo4=newDog("dog4",4,2);
  61. Dogo5=newDog("dog5",5,1);
  62. Dog[]dogs=newDog[]{o1,o4,o3,o5,o2};
  63. System.out.println("未排序前");
  64. for(inti=0;i<dogs.length;i++){
  65. Dogdog=dogs[i];
  66. System.out.println(dog.getName());
  67. }
  68. Arrays.sort(dogs,newByHeightComparator());
  69. System.out.println("使用高度排序之后:");
  70. for(inti=0;i<dogs.length;i++){
  71. Dogdog=dogs[i];
  72. System.out.println(dog.getName());
  73. }
  74. Arrays.sort(dogs,newByWeightComparator());
  75. System.out.println("使用重量排序之后:");
  76. for(inti=0;i<dogs.length;i++){
  77. Dogdog=dogs[i];
  78. System.out.println(dog.getName());
  79. }
  80. }
  81. }
  82. classDog{
  83. privateStringname;
  84. privateintweight;
  85. privateintheight;
  86. publicDog(Stringname,intweight,intheight){
  87. this.setName(name);
  88. this.weight=weight;
  89. this.height=height;
  90. }
  91. publicintgetHeight(){
  92. returnheight;
  93. }
  94. publicvoidsetHeight(intheight){
  95. this.height=height;
  96. }
  97. publicintgetWeight(){
  98. returnweight;
  99. }
  100. publicvoidsetWeight(intweight){
  101. this.weight=weight;
  102. }
  103. publicvoidsetName(Stringname){
  104. this.name=name;
  105. }
  106. publicStringgetName(){
  107. returnname;
  108. }
  109. }
  110. classByWeightComparatorimplementsComparator{
  111. publicintcompare(ObjectfirstDog,ObjectsecondDog){
  112. intfirstWeight=((Dog)firstDog).getWeight();
  113. intsecondWeight=((Dog)secondDog).getWeight();
  114. returnsignum(firstWeight-secondWeight);
  115. }
  116. publicstaticfinalintsignum(intdiff){
  117. if(diff>0)
  118. return1;
  119. if(diff<0)
  120. return-1;
  121. else
  122. return0;
  123. }
  124. }
  125. classByHeightComparatorimplementsComparator{
  126. publicintcompare(ObjectfirstDog,ObjectsecondDog){
  127. intfirstHeight=((Dog)firstDog).getHeight();
  128. intsecondHeight=((Dog)secondDog).getHeight();
  129. returnsignum(firstHeight-secondHeight);
  130. }
  131. publicstaticfinalintsignum(intdiff){
  132. if(diff>0)
  133. return1;
  134. if(diff<0)
  135. return-1;
  136. else
  137. return0;
  138. }
  139. }
  140. 5:以下程序演示了如何对中文进行排序
  141. packagemypack;
  142. importjava.text.Collator;
  143. importjava.text.RuleBasedCollator;
  144. importjava.util.Arrays;
  145. importjava.util.Locale;
  146. publicclassTest{
  147. publicstaticvoidmain(String[]args){
  148. String[]test=newString[]{"的","波","次","啊"};
  149. Arrays.sort(test,(RuleBasedCollator)Collator.getInstance(Locale.CHINA));
  150. for(Stringkey:test)
  151. System.out.println(key);
  152. }
  153. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值