Java比较器Comparable与Comparator

当需要对一组对象进行排序的时候,一定要指定比较规则,
这种比较规则主要是将某一个类中的几个属性进行比较。

对于这种比较器的实现,在Java中有两种接口完成:

Comparable:使用的最广泛的一种
Comparator:属于挽救的比较的一种
Comparable接口

Arrays.sort(per); Person已经继承了排序方法

如果对象数组要排序,则对象所在的类必须实现Comparable接口。

该接口具有唯一的方法compareTo(Object),其定义为:

    public interface Comparable<T>
{
    public int compareTo(Object o);
}

它将当前对象与对象 o 进行比较。如果他们相等,就返回0。如果调用对象比对象o小,则返回一个负值。否则返回一个正值。
实现了Comparable接口的类实例对象的列表或数组将自动地由Collections.sort或者Arrays.sort依据自然排序规则升序排列
样例:

 class Person implements Comparable<Person> { 
      private String name; 
      private int age; 
      public Person(String name, int age) { 
              this.name = name; 
              this.age = age; 
     } 
    public String toString() { 
           return "姓名:" + this.name + ",年龄:" + this.age; 
   } 
  public int compareTo(Person o) { 
        if (this.age > o.age) { 
              return 1;   
        } else if (this.age < o.age) { 
           return -1; 
      } else { 
           return 0; 
     } 
  } 
} 
public class Test { 
  public static void main(String[] args) { 
     Person per[] = { new Person("张三", 20), new Person("李四", 19), new Person("王五", 23) }; 
     Arrays.sort(per); 
    for (int x = 0; x < per.length; x++) { 
        System.out.println(per[x]); 
    }
 }
}

Comparator接口

若一个对象数组需要满足多个排序规则那么需要使用Comparator;
Arrays.sort(per,new PersonComparator()); 要有指定的排序类
该接口有两个方法:
public interface Comparator{
public int compare(Object o1,Object o2);
public Boolean equals(Object obj);
}
ü compare方法比较o1和o2,如果对象o1小于、等于或大于对象o2,方法将分别返回负数、零和正数。
ü定义一个类实现Comparator接口作为指定类的排序类,在此类中只实现compare方法。
样例:

class Person { 
    ***
}
class PersonComparator implements Comparator<Person> { 
    //实现compare方法
      public int compare(Person o1, Person o2) { 
              if (o1.getAge() > o2.getAge()) { 
                    return 1; 
             } else if (o1.getAge() < o2.getAge()) { 
                return -1; 
            } else { 
                  return 0; 
           } 
    } 
} 
public class Test { 
      public static void main(String[] args) { 
            Person per[] = { new Person("张三", 20), new Person("李四", 19),  new Person("王五", 23) }; 
          //用Comparator接口作为指定类的排序类
           Arrays.sort(per,new PersonComparator()); 
      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值