目录
一、Comparable(内部比较器)
实例:
二、Comparator(外部比较器)
实例:
三、两者区别
一、Comparable(内部比较器)
Comparable接口只包含一个compareTo()方法,该方法可以给两个对象进行排序。
具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。
实例:
1、定义一个Person实体类去实现Comparable接口,并重写compareTo方法,本例比较的是当前Person类,通过age属性进行比较。
public class Person implements Comparable{ private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Person o) { // TODO Auto-generated method stub if(this.age > o.age){ return 1; }else if(this.age < o.age){ return -1; }else{ return 0; } }
2、定义测试类Test,使用Collections.sort(T t)进行排序。
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(new Person("小张",23));
list.add(new Person("小李",24));
list.add(new Person("小王",21));
// Collections.shuffle(list);
Collections.sort(list);//使用该方法进行排序
System.out.println(list);
}
二、Comparator(外部比较器)
可以实现自定义比较规则,元素自身提供的比较规则称为自然排序;
compara(o1,o2),如果返回值为0,则为重复元素;
Comparator 接口包含compare ()和equals()两个方法。
使用Comparator比较器,元素类型可不实现Comparable接口,并且优先级高于Comparable接口。
实例:1、定义一个Person实体类
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
2、定义测试类Test
public static void main(String[] args) {
Comparator com=new Comparator() {
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return o1.getAge()-o2.getAge();
}
};
ArrayList list=new ArrayList();
list.add(new Person("小张",21));
list.add(new Person("小李",32));
list.add(new Person("小王",11));
Collections.sort(list, com);
System.out.println(list);
}
三、两者区别
1、接口都可以用来实现集合中元素的比较、排序,Comparator位于包java.util下,而Comparable位于包java.lang下;
2、实现comparable 必须重写compareTo(T o),实现comparator必须重写compare(T o1,T o2);
3、Comparator与Comparable同时存在的情况下,比较器Comparator优先级高。



