Comparable和Comparator的区别
- 包路径不相同:Comparable在java.lang下,Comparator在java.util下
- 包含方法不同:
- Comparable只包含一个方法:
int compareTo(T object)
- 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方法对元素进行比较。
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 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);
}
}
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());
}
};
Collections.sort(listOne,com);
System.out.println(listOne);
}
}