Java中解锁数组正确姿势以及赋值,foreach遍历?,Java自带的对数组排序,比较等等的静态方法总结

初始化

①.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

猜你喜欢

转载自blog.csdn.net/emmmsuperdan/article/details/79686920