隐藏

Java中重写方法对多个对象进行排序
2022年 02月 23 日

Calvin

正常情况下,只能进行比较: ==!=。不能使用 ><

但是在开发场景中,我们需要对多个对象进行排序 使用两个接口中的任何一个:ComparableComparator




Comparable接口的使用举例: 自然排序 从小到大



  1. 像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。

  2. 像String、包装类重写compareTo()方法以后,进行了从小到大的排列

  3. 重写compareTo(obj)的规则:

    • 如果当前对象this大于形参对象obj,则返回正整数,

    • 如果当前对象this小于形参对象obj,则返回负整数,

    • 如果当前对象this等于形参对象obj,则返回零。



  4. 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序


代码示例:


    Good[] goods=new Good[5];

    goods[0]=new Good(&quot;lenovo&quot;,34);
    goods[1]=new Good(&quot;xiaomi&quot;,22);
    goods[2]=new Good(&quot;apple&quot;,55);
    goods[3]=new Good(&quot;huawei&quot;,23);
    goods[4]=new Good(&quot;hb&quot;,34);
    Arrays.sort(goods);
    System.out.println(Arrays.toString(goods));

public class Good implements Comparable{

    @Override
public int compareTo(Object o) {
   if (o instanceof Good){
       Good g=(Good) o;
       if (this.price&gt;g.price){
           return 1;

       }else if (this.price&lt;g.price){
           return -1;
       }else {

           return -this.name.compareTo(g.name);
       }
         } throw new RuntimeException(&quot;类型不一致无法比较&quot;); }   


Comparator接口的使用:定制排序


  1. 背景:当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator的对象来排序.

  2. 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:



  • 如果方法返回正整数,则表示o1大于o2;

  • 如果返回0,表示相等;

  • 返回负整数,表示o1小于o2。

Java中重写方法对多个对象进行排序

正常情况下,只能进行比较: ==!=。不能使用 ><

但是在开发场景中,我们需要对多个对象进行排序 使用两个接口中的任何一个:ComparableComparator




Comparable接口的使用举例: 自然排序 从小到大



  1. 像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。

  2. 像String、包装类重写compareTo()方法以后,进行了从小到大的排列

  3. 重写compareTo(obj)的规则:

    • 如果当前对象this大于形参对象obj,则返回正整数,

    • 如果当前对象this小于形参对象obj,则返回负整数,

    • 如果当前对象this等于形参对象obj,则返回零。



  4. 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序


代码示例:


    Good[] goods=new Good[5];

    goods[0]=new Good(&quot;lenovo&quot;,34);
    goods[1]=new Good(&quot;xiaomi&quot;,22);
    goods[2]=new Good(&quot;apple&quot;,55);
    goods[3]=new Good(&quot;huawei&quot;,23);
    goods[4]=new Good(&quot;hb&quot;,34);
    Arrays.sort(goods);
    System.out.println(Arrays.toString(goods));

public class Good implements Comparable{

    @Override
public int compareTo(Object o) {
   if (o instanceof Good){
       Good g=(Good) o;
       if (this.price&gt;g.price){
           return 1;

       }else if (this.price&lt;g.price){
           return -1;
       }else {

           return -this.name.compareTo(g.name);
       }
         } throw new RuntimeException(&quot;类型不一致无法比较&quot;); }   


Comparator接口的使用:定制排序


  1. 背景:当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator的对象来排序.

  2. 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:



  • 如果方法返回正整数,则表示o1大于o2;

  • 如果返回0,表示相等;

  • 返回负整数,表示o1小于o2。

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论