提高代码的重用性之——泛型



                                         作者信息                                                                             




写在前面                                                                                                                     



我们都知道java有个优势就是代码的重用性比较高,那么如何实现所谓“重用性”呢???



例子一枚                                                                                                                     



就拿一个最简单的例子来说吧,对数组{112,25,3,44,5}进行冒泡排序


那么我们很容易的就可以写出一个冒泡排序的函数如下

public static void bubbleSort(int[] arr) {
		boolean flage = true;
		for (int i = 0; flage && i < arr.length - 1; i++) {
			flage = false;
			for (int j = 0; j < arr.length - i - 1; j++) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
					flage = true;
				}
			}
		}
	}

初步改进                                                                                                                     


很显然这个函数可以应对整形数组的排序,但是如果针对一个浮点型数组,那么该函数就无法处理,


也许你会说,可以再改成一个浮点型的,那么就既可以处理整形也可以处理浮点型了


public  static void bubbleSort(double[] arr) {
		boolean flage = true;
		for (int i = 0; flage && i < arr.length - 1; i++) {
			flage = false;
			for (int j = 0; j < arr.length - i - 1; j++) {
				if (arr[j] > arr[j + 1]) {
					double temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
					flage = true;
				}
			}
		}
	}


再次改进                                                                                                      



那么如果针对的是一个字符型的数组呢????


如果说针对的是一个字符串型的数组呢???


如果我既要从小到大排序又要从大到小排序呢???


如果我要根据人的重量对人进行排序呢????


很显然我们需要的是一个可以处理数组元素是任意的,可以自己决定比较的属性的一个方法


public static <T> void bubbleSort(T[] arr, Comparator cmp) {
		boolean flage = true;
		for (int i = 0; flage && i < arr.length - 1; i++) {
			flage = false;
			for (int j = 0; j < arr.length - i - 1; j++) {
				if (cmp.compare(arr[j], arr[j + 1]) > 0) {
					T temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
					flage = true;
				}
			}
		}
	}


那么现在就可以处理数组元素是任意的情况了,只需要根据自己的需求创建不用的比较器即可



import java.util.Comparator;
/**
 * @author_Stone6762
 */
public class FirstMin implements Comparator<Integer> {
	@Override
	public int compare(Integer i1, Integer i2) {
		return i2 - i1;
	}
}



import java.util.Comparator;

/**
 * @author_Stone6762
 */
public class FirstMax implements Comparator<Integer> {
	@Override
	public int compare(Integer i1, Integer i2) {
		return i1-i2;
	}

}


最后                                                                                                             


因为中间牵扯到一个问题就是,“工人”,“学生”都是“人”,二者很显然可以比较体重。



但是比较器针对的对象只能是一个



所以必须对函数进行修改


public static <T> void bubbleSort(T[] arr, Comparator<? super T> cmp) {
		boolean flage = true;
		for (int i = 0; flage && i < arr.length - 1; i++) {
			flage = false;
			for (int j = 0; j < arr.length - i - 1; j++) {
				if (cmp.compare(arr[j], arr[j + 1]) > 0) {
					T temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
					flage = true;
				}
			}
		}
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值