初始化
①.double[ ] myList;//此时myList还未分配空间,直到下一步
myList=new double[5];
②.double[ ] myList=new double[5];
以上是两种初始化的方式;
二维数组初始化:
赋值
下面说一下赋值的方式:
①.double[ ] myList={1,2,3,4,5};
②.double[ ] myList=new double[5];
myList[0]=1;
myList[1]=2;
myList[2]=3;
myList[3]=4;
myList[4]=5;
下面说一下错误的赋值:
double[ ] myList;
myList={1,2,3,4,5};//为什么?因为此时myList还没分配空间
foreach循环:(增强型for)
for(数组类型 数组元素e : 数组名称)
例:for(int x: array)
System.out.println(x);这样就可以遍历array中的所有元素;
数组如何复制:
如果进行 list2=list1操作的话,虽然能让list2指向list1的内存地址(这句赋值语句只能改变list2的内存指向,不会改变内容),从而使list2获取list1的内容,可是list2原先的内存地址内容就会被GC,违背了复制的本意;
三种复制的方法:
①.将数组里的元素一一找出赋值;
②.使用System中的静态方法arraycopy(sourceArray, srcPos, targetArray, tarPos, length);(不解释连招)
③.使用clone()方法;
匿名数组:
类似于匿名对象,只是暂时用一下,如果以后都不需要用到这个数组,就可以使用匿名数组:
public void array(int a[ ]){
for(int e:a)
System.out.println(e);
}
如何调用方法时使用匿名数组呢? array(new int[ ]{1,2,3});即可,甚至连数组名都不需要
当数组作为形参时:
回顾一下,当基本类型作为形参时,形参和实参都放在同一个栈之中,且两个东西的内存地址也是不一样的,所以调用方法,实参传值给形参,形参不论怎么变都不会改变实参的值;
反观数组,当数组作为形参,形参和实参都放在一个栈中,但是他们指向的是同一个数组,也就是说形参实参共享这个数组,所以实参传值传的其实是个引用,指向同一个数组,形参在方法中变了,那么实参也会变;
原理图:
注意:数组是放在堆中;因为数组也是对象,JVM将所有的对象都放在了堆中Heap;
方法返回类型是个数组:
public void int[ ] arraytest(int[ ] List){
return 一个数组;
}
当数组中存放的是对象:(其实String ,Integer也是类,也是这样初始化)
class Circle{
}
Circle[ ] circle=new Circle[10];
然后一个一个添加Circle的对象;
数组排序:
Array的静态方法是Arrays.sort(数组名),或者Arrays.sort(数组名,startpos,endpos)
返回数组的字符串形式(常用):
Arrays.toString(数组名);
int[] list = {2 , 4, 7, 10};
System.out.println(Arrays.toString(list));
显示 [ 2 , 4 , 7, 10],相当于{"2","4","7","10"}
查找数组元素位置(二分法查找):
Arrays.binarySearch(数组名,要查找的元素);找到的话会返回下标,没找到返回一个负数;
数组内容比较:
Arrays.equal(数组名1,数组名2);返回true或false