在PAT中的很多题目中,需要按照要求进行排序,而这种排序基本上是Java本身不具备的,这时使用接口Comparable或者Comparator
有两种方式可以进行集合排序 :
- 集合中对象的所属类实现了 java.lang.Comparable 接口
- 为集合指定比较器 java.lang.Comparator 的实现类
public interface Comparable<T>{
public int compareTo(T O);
}
比如
class Moon implements Comparable<Moon>{
double amount=0.0;
double price=0.0;
double rate=0.0;
public int compareTo(Moon m){
return this.rate>m.rate?-1:1;
}
}
这样就可以对Moon类的对象按照rate的大小进行排序:
Collections.sort(list);
二、Comparator
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2)函数,但是可以不实现equals函数。
1.如果一个类已经开放完成,但是在此类建立的初期并没有实现 Comparable 接口,此时肯定是无法进行对象排序操作的,所以为了解决这一的问题,java 又定义了另一个比较器的操作接口 Comparator 此接口定义在 java.util 包中
2. 为了使用不同的排序标准做准备,比如升序,降序或者其他什么序列
Comparator<Man> c=new Comparator<Man>(){
public int compare(Man m1,Man m2){
if(m1.v+m1.t>m2.v+m2.t){
return 1;
}
else if(m1.v+m1.t<m2.v+m2.t){
return -1;
}
else{
if(m1.v>m2.v){
return 1;
}
else if(m1.v<m2.v)
return -1;
else{
if(Integer.parseInt(m1.id)>Integer.parseInt(m2.id))
return -1;
else
return 1;
}
}
}
};
Collections.sort(list1,c);
这里就可以将Man按照所需要求进行排序。也可以写成匿名类
Collections.sort(list1,new Comparator<Man>(){
public int compare(Man m1,Man m2){
}
});
总结:其实Comparablehe和Comparator作用上并没有多大差别,只是写法上有些不同,使用时注意即可!