-
java.util.Comparator 接口声明了: int compare<T o1, T o2> 方法
public interface Comparator<T> { public int compare(T o1,T o2); }
比较用来排序的两个参数:
1)如果o1大于o2,则返回1;
2)如果o1小于o2,则返回-1
3)如果o1等于o2,则返回0定义排序规则:
参数中两个对象进行比较,如果比较结果为1进行交换,其他不进行交换。当后一个对象比当前对象大(o2.compareTo(o1) >0),返回结果值为1时,前后交换,说明是降序排列。
当后一个对象比当前对象小(o1.compareTo(o2) > 0),返回结果值为1时,前后交换,说明是升序排列。return o1.compareTo(o2)
表示升序,因为如果o1>o2,返回1,则compare(o1,o2)中前面的参数在后面(原排序(o1,o2),返回1,交换,(o2,o1),o1>o2,即升序)return o2.compareTo(o1)
表示降序,如果o1>o2,o2.compareTo(o1) = o2-o1 < 0,返回-1,则参数中前面的排序在前面(不交换)。如果返回1,表示o2>o1,交换顺序。原(o1,o2)——>(o2,o1),即降序。
-
java.lang.Comparable 接口声明了: int compareTo(T o) 方法,属于对象方法,要使用这种比较器的对象要实现Comparable接口,重写compareTo方法。
比较此对象与执行对象的顺序。比较规则同上,即:
1)如果此对象大于指定对象,返回1
2)如果此对象小于指定对象,返回-1
3)如果此对象等于指定对象,返回0
数字排序
奇数在前,偶数在后。奇数降序,偶数升序。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class HWCompetition {
public static void main(String[] args){
String s="0,1,2,3,4,5,6,7,8,9";
System.out.println(getSort(s)); //9 7 5 3 1 0 2 4 6 8
}
public static String getSort(String s){
List<Integer>list=new ArrayList<Integer>();
String[] ss=s.split(",");
for(int i=0;i<ss.length;i++){
list.add(Integer.parseInt(ss[i]+"") );
}
Collections.sort(list, new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
int result=0;
if(o1%2==0&&o2%2==1){
result=o2%2 - o1%2; //如果偶数在前,奇数在后,%2后1-0>0,交换
}
if(o1%2 ==1 && o2%2==0){
result= o2%2 - o1%2;
}
if(o1%2==1&&o2%2==1){
result=o2-o1; //奇数降序
}
if(o1%2==0&&o2%2==0){
result= o1-o2; //偶数升序
}
return result;
}} );
StringBuffer sb=new StringBuffer();
for(int i:list){
sb.append(i+" ");
}
return sb.toString();
}
}