Java比较器Comparable/Comparator

  • 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

    Java中两种比较器的实现
    compareTo返回值为-1 、 1 、 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();
	  }
}	 

Java自定义比较器Comparator

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值