黑马程序员技术交流社区
标题:
Comparable与Comparator的区别和用法?
[打印本页]
作者:
zhouxp3323
时间:
2012-3-21 20:15
标题:
Comparable与Comparator的区别和用法?
Comparable与Comparator什么时候用哪个比较合适呢
作者:
陈从宾
时间:
2012-3-21 20:31
1、Comparable<T>是一个接口里面只有一个方法comparaTo()比较此对象与指定对象的顺序。
如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
做题的一般过程是,把创建对象赋的值放在ArrayList里面。再通过Collections类的sort()方法
排序;然后输出就可以了。(普通类要实现Comparable<T>借口里面的comparaTo()方法,不然的话)不能
用Collections类的sort()方法。
2、Comparator<T>是一个接口里面有两个方法public int compare(Object arg0, Object arg1)和boolean equals(Object obj)继承 Comparator必须实现compare方法,用compareTo比较属性值,把对象的值保存在ArrayList中;同时用 Collections.sort(List<T> list,Comparator<? super T> c)去比较。最后输出即可。
作者:
周建
时间:
2012-3-21 20:45
这是TreeSet的两种排序方式,所以如果定义的集合是TreeSet的 ,要对将要存入的元素排序时,可以用这两种方法;
Comparable是Java.lang包中的借口,可以通过元素实现接口的方式使元素自身具备比较性,必须在子类中复写compareTo方法;
Comparator是Java.Util包中的接口,让集合具备比较性,实现compartor接口,覆盖compare方法,实现一个比较器,在创建集合时将比较器传入:
TreeSet ts = new TreeSet(new cmp());
应为TreeSet底层是TreeMap实现的,所以想要比较TreeMap也可以使用这两种方法
作者:
♂诸侯♂
时间:
2012-3-21 20:51
1. 使用Comparable排序
import java.util.*;
public class ComparableTest{
public static void main(String[] args ){
ArrayList<DVDInfo> dvdList = new ArrayList<DVDInfo>();
populateList(dvdList); // adds the file data to the ArrayList
System.out.println("Before Sorting:");
System.out.println(dvdList);
Collections.sort(dvdList);
System.out.println("After Sorting:");
System.out.println(dvdList);
}
class DVDInfo implements Comparable<DVDInfo> {
String title;
String genre;
String leadActor;
DVDInfo(String t, String g, String a) {
title = t; genre = g; leadActor = a;
}
public String toString() {
return title + " " + genre + " " + leadActor + "/n";
}
public int compareTo(DVDInfo d) {
return title.compareTo(d.getTitle());
}
public String getTitle() {
return title;
}
// other getters and setters
}
public static void populateList(ArrayList<DVDInfo> dvdList){
//Call inner class from a static context. use new OuterClass.new InnerClass()
DVDInfo di1 = new ComparableTest().new DVDInfo("Matrix", "Science Fiction", "Keanu Reeves");
DVDInfo di2 = new ComparableTest().new DVDInfo("Forrest Gump", "Comedy-drama", "Tom Hanks");
DVDInfo di3 = new ComparableTest().new DVDInfo("Mission Impossible", "Action", "Tom Cruise");
dvdList.add(di1);
dvdList.add(di2);
dvdList.add(di3);
}
}
/*
Result:
Before Sorting:
[Matrix Science Fiction Keanu Reeves
, Forrest Gump Comedy-drama Tom Hanks
, Mission Impossible Action Tom Cruise
]
After Sorting:
[Forrest Gump Comedy-drama Tom Hanks
, Matrix Science Fiction Keanu Reeves
, Mission Impossible Action Tom Cruise
]
*/
复制代码
2. 使用Comparator排序
import java.util.*;
public class ComparatorTest{
public static void main(String[] args ){
ArrayList<DVDInfo> dvdList = new ArrayList<DVDInfo>();
populateList(dvdList); // adds the file data to the ArrayList
System.out.println("Before Sorting:");
System.out.println(dvdList);
TitleComparator tc = new ComparatorTest().new TitleComparator();
Collections.sort(dvdList, tc);
System.out.println("After Sorting:");
System.out.println(dvdList);
}
class TitleComparator implements Comparator<DVDInfo>{
public int compare(DVDInfo one, DVDInfo two){
return one.getTitle().compareTo(two.getTitle());
}
}
//No need to implement Comparable
class DVDInfo {
String title;
String genre;
String leadActor;
DVDInfo(String t, String g, String a) {
title = t; genre = g; leadActor = a;
}
public String toString() {
return title + " " + genre + " " + leadActor + "/n";
}
public String getTitle() {
return title;
}
// other getters and setters
}
public static void populateList(ArrayList<DVDInfo> dvdList){
//Call inner class from a static context. use new OuterClass.new InnerClass()
DVDInfo di1 = new ComparatorTest().new DVDInfo("Matrix", "Science Fiction", "Keanu Reeves");
DVDInfo di2 = new ComparatorTest().new DVDInfo("Forrest Gump", "Comedy-drama", "Tom Hanks");
DVDInfo di3 = new ComparatorTest().new DVDInfo("Mission Impossible", "Action", "Tom Cruise");
dvdList.add(di1);
dvdList.add(di2);
dvdList.add(di3);
}
}
/*
Result:
Before Sorting:
[Matrix Science Fiction Keanu Reeves
, Forrest Gump Comedy-drama Tom Hanks
, Mission Impossible Action Tom Cruise
]
After Sorting:
[Forrest Gump Comedy-drama Tom Hanks
, Matrix Science Fiction Keanu Reeves
, Mission Impossible Action Tom Cruise
]
*/
复制代码
出处:http://blog.csdn.net/tohmin/article/details/6142611
QQ截图20120321204741.bmp
(571.46 KB, 下载次数: 13)
下载附件
2012-3-21 20:49 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2