递归与泛型
递归的本质是将一个大问题分解为一个简单的小问题然后逐步推进,比如说将1234打印出4,3,2,1的顺序,那么本质上就是n%10,可以将1234分解不断除以十,得到四个 个位数。
递归法则:
1、基准,即有穷,最终至少有一个情形是已知的,比如说第一个数或者最后一个数是可以得知的。
2、不断推进,能不断嵌套执行靠近基准。
3、递归的方法中不要做重复性的工作。
/**
* @author wulei
* 递归测试
*/
public class RecursiveTest {
public static void main(String[] args){
printAll(4267);
}
private static void printAll(int n){
if(n > 10){
printAll(n/10);//变量的值计算机会记录,当执行第二次递归时,堆栈上会创建一批新的变量,除非递归调用返回,不然没有机会执行之前的变量。
}
System.out.println(n%10);
}
}
泛型~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
泛型的意义-参数类型化:https://www.jianshu.com/p/5179ede4c4cf
1、基本数据类型可以自动拆箱装箱;比如定义的方法setXY(Integer X,Integer Y),可以使用setXY(1,2),编译器会在幕后插入一个对Integer构造方法的调用(装箱),反之从获取int x = getXY()(拆箱)。
2、泛型方法前需要将泛型的参数放在返回值之前。
3、当且仅当在实例化的时候指出具体的参数类型。
/**
* 泛型测试
* @author wulei
*/
public class GenericTest {
protected static class CaseCompare implements Comparator<String>{//此处内部类必须静态,以此在main()中执行的时候可以直接实例化
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);//顺序为123ABCabc 即数字最小,然后是大写字母,最后是小写字母。
}
}
public static <T> T findMax(T[] arr,Comparator<T> cmp){
int maxIndex = 0;
for(int i = 0; i < arr.length; i++ ){
if(cmp.compare(arr[i], arr[maxIndex]) > 0){
maxIndex = i;
}
}
return arr[maxIndex];
}
public static void main(String[] args){
String[] arr = {"a","c","b"};
System.out.print(findMax(arr, new CaseCompare()));
}
}
参考泛型来源:http://blog.****.net/ghui23/article/details/52137115