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接口的类被称作比较器。
当想要使用元素自身的自然顺序对元素进行排序时,就可以通过实现Comparable接口来实现
当不想使用元素自身的自然顺序,而是想使用自定义的顺序进行排序时,此时要让集合自身具备比较功能,要定义一个类实现Comparator接口,覆盖campare()方法,可以将该类对象作为参数传递给TreeSet,实现自定义排序
public TreeSet(Comparator comparator);
Comparable接口对实现它的每个类的对象进行整体排序
Comparator接口实现对对象collection进行整体排序,可以将Comaprator传递给:
Collection.sort()方法,实现对List排序进行精确控制
Arrays.sort()方法,实现对数组排序进行精确控制
TreeSet的构造函数,实现对TreeSet集合进行精确控制
TreeMap的构造函数,实现对TreeMap进行精确控制。
传入的Comparator对象必须覆盖compare方法。
对于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方法。
相关文章推荐
- Geom error原因以及解决办法
- springMVC框架整体介绍
- Bitmap和File相互转换
- Python基础-sys模块
- PHP初学注意小记
- 在Ubuntu14.04上安装OpenRAVE
- spring-xml
- 使用链式结构实现队列
- Python入门:简单理解if __name__ == '__main__':
- 公钥,私钥和数字签名这样最好理解
- 建议43:让接口中的泛型参数支持协变
- 51Nod-1319-跳跃游戏
- 最基本的接收和读取和数据库命令增删改查
- linux epoll示例
- Android性能优化的一些记录
- Failed to load the JNI shared
- 01背包基础-1085 背包问题
- @OneToMany或@ManyToOne的用法-annotation关系映射篇(上)
- Android中的各种样式的Dialog
- 1528;匹配字符串(平顶山学院)