您的位置:首页 > 其它

Comparable和Comparator

2016-09-06 16:23 246 查看
对于Comparable接口来说,仅包含一个compareTo方法,public int compareTo(Object o) {},仅有一个参数。

对于Comparator接口来说,仅包含一个compare方法,public int compare(Object o1, Object o2) {},有两个参数。Comparator一般会被单独实现。

实现Comparator接口的类被称作比较器。

package pac;

class User implements Comparable{
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return this.age-((User)o).getAge();
}
private String id;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String id, int age) {
super();
this.id = id;
this.age = age;
}

}

public class Demo2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
User u1=new User("001",18);
User u2=new User("002",20);
if(u1.compareTo(u2)>0) System.out.println(u1.getId()+"大");
else System.out.println(u1.getId()+"小");
}

}
</pre><pre code_snippet_id="1868765" snippet_file_name="blog_20160906_3_4773828" name="code" class="java">package pac;

import java.util.Comparator;

class Users{

private String id;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Users(String id, int age) {
super();
this.id = id;
this.age = age;
}

}

class UserComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return ((Users)o1).getAge()-((Users)o2).getAge();
}
}
public class Demo3 {
public static void main(String[] args) {
Users u1=new Users("001",18);
Users u2=new Users("002",20);
Comparator cmp=new UserComparator();
if(cmp.compare(u1, u2)>0) System.out.println(u1.getId()+"大");
else System.out.println(u1.getId()+"小");

}
}

当想要使用元素自身的自然顺序对元素进行排序时,就可以通过实现Comparable接口来实现

public class Person implements Comparable {
public int compareTo(Object o) {
.................
}
}

当不想使用元素自身的自然顺序,而是想使用自定义的顺序进行排序时,此时要让集合自身具备比较功能,要定义一个类实现Comparator接口,覆盖campare()方法,可以将该类对象作为参数传递给TreeSet,实现自定义排序

public TreeSet(Comparator comparator);

public class PersonComparator implements Comparator {
public int compare(Object o1, Object o2) {
.....................
}
}

Comparable接口对实现它的每个类的对象进行整体排序

Comparator接口实现对对象collection进行整体排序,可以将Comaprator传递给:

Collection.sort()方法,实现对List排序进行精确控制

Arrays.sort()方法,实现对数组排序进行精确控制

TreeSet的构造函数,实现对TreeSet集合进行精确控制

TreeMap的构造函数,实现对TreeMap进行精确控制。

传入的Comparator对象必须覆盖compare方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: