java数据结构与算法分析总结第一篇(基础)

1.递归简论

递归是不是循环推理机制:

答:不是,递归是方法调用方法本身,但我们并没有利用方法本身定义方法的一个实例,例如循环是利用f(5)得到f(5)的值,而递归是利用f(4)得到f(5)的值;

递归的四条基本准则:

(1)要有基准情况,不然递归无法结束;

(2)要不断递进;

(3)设计法则:所有的递归调用都能运行

(4)合成效益法则:对于一个问题的同一实例时,切勿在递归调用中重复调用;(所以说在计算简单的数值问题时最好不用递归,利用斐波那契数之类的数学函数)

2.实现泛型特性构件(代码重用的支持)

(1)使用object表示泛型

public class FanXin{

private object  canshu;

private void write(object x){

canshu=x;

}

private object read(){
return canshu;

}

}

public class Exp{

public static void main(String []args){

FanXin f=newFanXIn();

f.write("20");

String val=(String)f.read();

System.out.println(val);

}

}

2.基本类型的封装

每一个引用类型都和object类型相容,但是8种基本类型却不能;

public class FanXin{

private object  canshu;

private void write(object x){

canshu=x;

}

public class Exp1{

public static void main(String []args){

Fanxin f=new FanXIn();

f.write(new Interger(37):    //不能用基本数据类型,因为基本数据类型不能与object相容

int  val=(Integer)f.read().intValue();   //使用intValue将包装类转换成基本数据类型

System.out.println(val);

}

}

3.使用接口类表示泛型(只用在object类中已有的方法能表示执行的操作时,采用object表示泛型)

找出一个数组中最大的项:

class FanXin{

public static Comparator FanXin(Comparable arr[]){

   int index=0;

 for(int i=i;i<arr.length.i++){
   if(arr[i].compareTo(arr[index]>0){

 index=i;

}

}

return arr[index];

}

public static void main(String args[]){

Shape [ ]shape={new Circle(2.0),new Square(3.0),new Rectangle(3.0,4.0)};

String []st1={"ava","jiaj","akjl"};

System.out.println(FanXIn(shape));

System.out.println(FanXin(String));

}

}

4.数组类型的兼容性

数组类型的兼容性是指假设 某个函数接收参数Person[],而Student[]继承Person[],那么Student[]就可以同样作为函数的参数;

java中数组是类型兼容的,这叫做协变数组类型;

5.利用java5泛性实现泛型

简单的泛型类:

public class FanXin<AnyType>{

public AnyType canshu;

public AnyType write(AnyType x){

canshu=x;

}

public AnyType read(){

return canshu;

}

}

class Exp3{

public static void main(String []args){
FanXin<String> f=new FanXin<String>();

f.write("37");

String val=f.read().intValue();

System.out.println(val);

// 使用自动拆箱装箱

/*

FanXIn<Integer> f=new FanXIn<Integer>();

f.write(37);

int val=f.read();

System.out.println(val);

*/

}

6.带有限制的通配符

java中数组是协变的,但集合不是协变的;这时候可以用限制通配符

计算集合中的面积和:

public static double totalArea(Collection<shape> arr){

double totalarea=0.0;

for(Shape s:arr){

  totalarea+=a.area();

}

return totalarea;

}

这个代码如果传入参数Collection<square>则会出错,因为collection不是协变的

所以要用通配符:public static double totalarea(Collection<?extends shape>)arr)

7.函数对象

例如当要对进行比较时,不想按照Comparable中的CompareTo()方法进行比较,就可以将一个函数(需要的比较方法)放在一个对象内部而被传递,这样的对象通常叫做函数对象;

Class  Exp4{

public static<AnyType> Comparable findMax(AnyType[]arr,Comparator <?super AnyType>cmp){

  int index=0;

for(int i=1;i<arr.length;i++)

{

if(compare(arr[i],arr[index])>0)

index=i;

}

return arr[index];

}

class MyCompare impletments Comparator<String>{

public void compare(String str1,String str2){

return str1.compareToIgnoreCase(str2);

}

}

public static void main(String[]args){

String x1[]={"ABCVD","akhkfj","bjbjk"};

System.out.println(findMax(x1,new MyCompare()));

}

 

 

 

你可能感兴趣的:(java数据结构与算法分析)