Java基础——Comparable和Comparator的区别

来源:互联网 发布:最安全的国家知乎 编辑:程序博客网 时间:2024/06/05 05:08

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优先选择Comparatorimport 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);    }}
0 0
原创粉丝点击