Java基础——Comparable和Comparator的区别

Comparable和Comparator的区别

  • 包路径不相同:Comparable在java.lang下,Comparator在java.util下
  • 包含方法不同:
    1. Comparable只包含一个方法:
      int compareTo(T object)
    2. Comparator包含两个方法:
      int compare(T object1,T object2)
      boolean equals(Object obj)
  • 都可以作用于集合中元素相互之间的比较,但是Comparable使用在集合元素对象内部,Comparator使用在元素对象外部。就Collections.sort()而言,当对类T实现了Comparable接口的时候,sort()方法通过类T中定义的compareTo方法对元素进行比较。如果类T没有实现Comparable方法,可以在调用sort()方法之前生成一个比较器:Comparator,将比较器传递给sort,sort()方法会按照Comparator中定义的compare方法对元素进行比较。
//此处Element实现了Comparable接口
public class Element implements Comparable<Element>{
    private int number;
    private String name;

    public Element(int number,String name)
    {
        this.number = number;
        this.name = name;
    }

    public int getNumber(){
        return number;
    }

    public String getName()
    {
        return name;
    }

    public int compareTo(Element object)
    {
        //return number - object.getNumber();
        return this.name.compareTo(object.getName());
    }

    public String toString()
    {
        return number + " " + name;
    }
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * Created by Administrator on 2017/1/6.
 */
public class Demo {
    public static void main(String[] args) {
        List<Element> eOne = new LinkedList<Element>();
        eOne.add(new Element(1,"ccc"));
        eOne.add(new Element(2,"bbb"));
        eOne.add(new Element(3,"aaa"));
        Collections.sort(eOne);
        System.out.println(eOne);
    }
}
//利用Comparator对元素进行比较,当Comparator和Comparable同时被实现时,sort优先选择Comparator
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Comparator;

public class DemoComparator {
    public static void main(String[] args)
    {
        List<Element> listOne = new LinkedList<>();
        listOne.add(new Element(1,"ccc"));
        listOne.add(new Element(2,"bbb"));
        listOne.add(new Element(3,"aaa"));

        Comparator<Element> com = new Comparator<Element>()
        {
            public int compare(Element a,Element b){
                return a.getName().compareTo(b.getName());
                //return a.getNumber()-b.getNumber();
            }
        };

        Collections.sort(listOne,com);
        System.out.println(listOne);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值