java回调函数的使用

今天看了看java的回调函数的简单使用,有点感想。

java为了避免C/C++的指针的使用错误,去除了指针这个功能,但是却保留了函数指针的功能,即回调函数。

所谓回调函数,就是指函数现在某处注册(已经写好),而它将在稍后某个需要的时候被调用。

举例如下:

现在已经实现了插入排序的升序方法,如下:

interface IntCompare{
	public int cmp(int a,int b);
}

class Cmp1 implements IntCompare{
	@Override
	public int cmp(int a, int b) {
		// TODO Auto-generated method stub
		if(a > b){
			return 1;
		}else if(a < b){
			return -1;
		}else{
			return 0;
		}
	}
}


IntCompare是一个接口,里面只有一个比较的方法的声明。Cmp1是对IntCompare的实现,里面很简单,当a>b,则返回1,a<b,则返回-1,a=b,则返回0。

插入排序代码如下:

public static void insertSort(int[] nums, IntCompare cmp){
	if(nums != null){
		for(int i = 1; i < nums.length; i++){
			int temp = nums[i],j = i;
			if(cmp.cmp(nums[i-1], temp) == 1){
				while(j >= 1 && cmp.cmp(nums[j-1], temp) == 1){
					nums[j] = nums[j-1];
					j--;
				}
			}
			nums[j] = temp;
		}
	}
}
主代码如下:

int[] nums1 = {7,3,19,40,4,7,1,15};
insertSort(nums1,new Cmp1());
for(int a:nums1)
	System.out.print(a + " ");

和普通的插入排序不同的时,参数多了一个自己定义的IntCompare对象cmp,将Cmp1实例化的对象作为参数传至inserSort()中,Cmp1的cmp方法中,当cmp(a,b)==1时,代表a>b。即nums[i-1]>temp,也就是当前处于降序的状态。会进入到函数主体中。

现要求实现降序排列,再写一个方法肯定是低效率的,那么按照Cmp1的类,再写一个Cmp2类,将Cmp2放入insertSort()中,就可以实现降序排列。

具体实现如下:

class Cmp2 implements IntCompare{
	public int cmp(int a,int b){
		if(a < b){
			return 1;
		}else if(a > b){
			return -1;
		}else{
			return 0;
		}
	}
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值