java comparator和comparable两种比较器比较
来源:互联网 发布:java 短信验证码校验 编辑:程序博客网 时间:2024/04/30 07:39
Comparable 和 Comparator 都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序 Comparator是在集合外部实现的排序所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo() Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作) 而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。 实现这个接口comparable里的函数compareTo,可以自定义比较的方法,就是想怎么比较怎么比较;但是comparator是一个比较器,可以实现很多的比较器,比如说要比较一些人,你可以实现一个按照年龄比较的比较器,也可以实现一个按照高度比较的比较器,如果你要按照不同方式比较的话,可以让那人实现comparable接口,然后再compareTo函数里调用不同的比较器第一种Comparator接口比较器:User1.java
- public class User1 {
- 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;
- }
- private String name;
- private int age;
- }
MyComparator.java
Test.java
- import java.util.Comparator;
- public class MyComparator implements Comparator{
- public int compare(Object o1, Object o2) {
- if(null==o1||null==o2){
- return -1;
- }
- User2 u1=(User2) o1;
- User2 u2=(User2) o2;
- if (u1.getAge() > u2.getAge()) {
- return 1; // 第一个大于第二个
- } else if (u1.getAge() < u2.getAge()) {
- return -1;// 第一个小于第二个
- } else {
- return 0; // 等于
- }
- }
- }
第二种 类比较器ComparableUser.java
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 接口比较器比较,是定义在类的外部的,它不会破坏user2本身
- List list = new ArrayList();
- User2 u1 = new User2();
- u1.setName("aaa");
- u1.setAge(10);
- list.add(u1);
- User2 u2 = new User2();
- u2.setName("bbb");
- u2.setAge(30);
- list.add(u2);
- User2 u3 = new User2();
- u3.setName("ccc");
- u3.setAge(20);
- list.add(u3);
- Collections.sort(list, new MyComparator());
- for (int i = 0; i < list.size(); i++) {
- User2 u = (User2) list.get(i);
- System.out.println(u.getAge());
- }
- }
- }
Test.java
- public class User implements Comparable{
- 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;
- }
- private String name;
- private int age;
- public int compareTo(Object o) {
- User u=(User) o;
- if(null==u){
- return -1;
- }
- if (this.age > u.getAge()) {
- return 1; // 第一个大于第二个
- } else if (this.age < u.getAge()) {
- return -1;// 第一个小于第二个
- } else {
- return 0; // 等于
- }
- }
- }
可以看到,使用comparator比comparable更加灵活
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 类比较器Comparable
- // Comparable是在内部定义的方法实现的排序.它将会改变对象(User)本身
- List list = new ArrayList();
- User u1 = new User();
- u1.setName("aaa");
- u1.setAge(10);
- list.add(u1);
- User u2 = new User();
- u2.setName("bbb");
- u2.setAge(30);
- list.add(u2);
- User u3 = new User();
- u3.setName("ccc");
- u3.setAge(20);
- list.add(u3);
- Collections.sort(list);
- for (int i = 0; i < list.size(); i++) {
- User u = (User) list.get(i);
- System.out.println(u.getAge());
- }
- }
- }
- java comparator和comparable两种比较器比较
- Java比较器-Comparable和Comparator
- java比较:Comparable和Comparator
- java中Comparable和Comparator两种比较器的区别
- Java比较器(Comparable、Comparator)
- Java-比较器(Comparable、Comparator)
- 比较器Comparable和Comparator
- 比较器:Comparable和Comparator
- 比较Comparable和Comparator
- Comparator和Comparable比较
- comparable和comparator比较
- Comparable和Comparator比较
- Comparator 和 Comparable 比较
- Comparator 和 Comparable比较
- Comparator和Comparable比较
- comparable和comparator比较
- Comparable、Comparator比较器
- 比较java comparable和Comparator 区别
- 瀑布流
- list view
- linux下的动态库和静态库
- (转载)JAVA全角半角转换
- J2EE学习笔记——Struts2的部署和使用
- java comparator和comparable两种比较器比较
- 杨氏矩阵查找
- VS2010+OpenCV2.4.3+Qt4.8.4 组合配置
- Tomcat详解 二
- 好想毕业出去了,在学校真累
- HTTP协议详解
- “当前不会命中断点 还没有为该文档加载任何符号”解决方法
- 读 Beginning Android Games 2nd Edition (六) 创建键盘事件处理类
- 移植Java虚拟机到mini2440