Comparable Comparator两个的具体使用

两个都可以用来排序都是接口,里面内部的源码具体如下
如果对字符串排序的话,String里面有一个compareTo方法,利用ascii码来比较。

public int compareTo(T o);//一个对象即可

使用时候当前类实现Comparable,也就是与Comparable 绑定了,支持了排序了。
Collections.sort(list);

 int compare(T o1, T o2);//需要传入两个对象
 boolean equals(Object obj);//Java中的一切类都是继承于Object,在Object中实现了equals(Object obj)函数其它所有的类也相当于都实现了该函数所以实现Comparator时候不强制实现这个方法

这个是自定义的比较灵活,只要自定义一个类去实现Comparator,然后
Collections.sort(list,new TestComparator());

具体代码如下,对Person的age进行排序

Person类 已经与Comparable绑定

package test.com;

public class Person implements Comparable<Person>{
    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    public String name;
    public int age;
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public int compareTo(Person person) {
        return  name.compareTo(person.name);
    }


}

TestComparator类实现Comparator

package test.com;

import java.util.Comparator;

public class TestComparator implements Comparator<Person>{

    @Override
    public int compare(Person o1, Person o2) {

        return o1.getAge()-o2.getAge();
    }

}

TestComparableAndComparator测试程序

package test.com;

import java.util.ArrayList;
import java.util.Collections;

public class TestComparableAndComparator {


public static void main(String[] args) {
     ArrayList<Person> list = new ArrayList<Person>();
             // 添加对象到ArrayList中
             list.add(new Person("a", 20));
             list.add(new Person("b", 30));
              list.add(new Person("c", 10));
              list.add(new Person("d", 40));
              Collections.sort(list);
              System.out.println(list);
              Collections.sort(list,new TestComparator());
              System.out.println(list);

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值