Skip to content

Latest commit

 

History

History
49 lines (36 loc) · 1.7 KB

数组.md

File metadata and controls

49 lines (36 loc) · 1.7 KB

数组

数组的一些性质

数组和容器比较一般有效率,类型,保存基本类型的能力三个有点,由于自动包装的出现使得仅有的有点就是效率了。

java的数组有一个明显比c++好的优点就是可以返回一个数组(相当于返回一个引用),而c++想这么干的话必须返回一个指针,而且指针指向的内存区域一般不能是局部的。如:

	int *fun(){
		int a[10];//局部变量,不能返回的,函数执行完毕他的声明周期就结束了!
		for(int i=0;i<10;i++){
			a[i]=i*i;
		}
		return a;
	}

java可以创建粗糙的多维数组,如下:

	int[][][] a=new int[4][][];
	for(int i=0;i<a.length;i++){
		a[i]=new int[5][];
		for(int j=0;j<a[i].length;j++){
			a[i][j]=new int[6];
		}
	}
	System.out.println(Arrays.deepToString(a));

一般情况下,对于数组存储的数据来说,基本类型如果是数值型自动初始化为0,如果是boolean自动初始化成false,如果是char就自动初始化成(char)0。对象的话自动初始化成null。

泛型和数组

我们不能实例化泛型数组,但是我们可以创建泛型数组的引用,然后通过某一些黑科技(创建飞泛型的数组,如Object[],然后将其转型)来创建类型的泛型数组。如:

	class Demo<T>{
		T[] array;
		Demo(int size){
			array=(T[])new Object[size];
		}
	}

对于数组的的排序我们可以使用Arrays提供的sort方法,这个我们排序的数组元素如果不是基本类型,那么就是使得这个类型实现了Comparable接口或者Comparator接口,这个方法就是策略模式,类似我们在c++里面的比较函数(函数指针实现)。