【JavaSE】数组(下)

五.数组的应用

1.参数传数组类型(引用数据类型)

在方法内部修改数组的内容,方法外部的数组内容也发生改变。

因为数组是引用类型,按照引用类型来进行传递,是可以修改其中存放的内容的。

    public static void main(String[] args) {
        int[] array = {1,2,3};
        func(array);
        System.out.println("array[0]="+array[0]);
    }
    public static void func(int[] x) {
        x[0] = 10;
        System.out.println("x[0]="+x[0]);
    }

总结:所谓的‘引用’本质只是存了一个地址,Java将数组设定为引用类型,后续进行数组参数传参,本质就是将数组的地址传给形参,避免了对整个数组的拷贝。

2.数组拷贝

 

(1)循环拷贝

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        int[] copy = new int[array.length];

        for (int i = 0;i < array.length;i++) {
            copy[i] = array[i];
        }
        System.out.println("copy="+Arrays.toString(copy));
        System.out.println("array="+Arrays.toString(array));

(2)copyOf拷贝

//copyOf的使用格式
        int[] 新数组对象 = Arrays.copyOf(原数组名,数组长度);

//示例
        int[] array = {1,2,3,4,5};
        int[] copy = Arrays.copyOf(array,array.length);
        System.out.println(Arrays.toString(copy));

copyOf是util包的工具方法,更简单的拷贝一个数组。本质是建立一个新数组,并把原数组拷贝到新数组里面,在修改新数组的内容时,原数组不会被修改,因为新数组和原数组引用的不是同一个数组。也可用于数组扩容。

(3)copyOfRange拷贝

在上面的copyOf方法中,拷贝的数组长度不能够自定义。而copyOfRange可以选取原数组的某一段长度。

//copyOfRange的使用格式
int[] 新数组对象 = Arrays.copyOfRange(原数组名,数组下标,数组下标);

//示例
        int[] array = {1,2,3,4,5};
        int[] copy = Arrays.copyOfRange(array,1,3);
        System.out.println(Arrays.toString(copy));

(4)注意

int[] arr = {1,2,3,4,5,6};
int[] newArr = arr;
newArr[] = 10;
System.out.println("newArr" + Arrays.toString(newArr));

这种不是拷贝!!!因为数组是引用类型,这相当于定义一个新数组,把原数组的地址给新数组,两个数组指向同一个地址,当新数组修改数组内容时,原数组也一起被修改了。

3.求数组平均值

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6};
        System.out.println(func1(array));
    }

    public static double func1(int[] n) {
        int sum = 0;
        for (int i = 0; i <= n.length - 1; i++) {
            sum += n[i];
        }
        double a = (double) sum / (double) n.length;
        return a;
    }

4.查找数组指定元素

    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        System.out.println(func2(arr,5));
    }

    public static int func2(int[] array,int data) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == data) {
                return array[i];
            }
        }
        return 0;
    }

六.二维数组

二维数组是特殊的一维数组。本质是一维数组存放的元素是一组一维数组的地址。

1.数组的创建和初始化

int[][] array1 = {{1,2,3},{4,5,6}};
        
int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
        
int[][] array3 = new int[2][3];
array3 = new int[][]{{1,2,3},{4,5,6}};

定义二维数组时,不能省略 行!

int[][] array4 = new int[2][];  //不规则数组

2.打印二维数组

//循环打印
int[][] array = {{1,2,3,4},{5,6,7,8}};
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 4; j++) {
        System.out.print(array[i][j] + " ");
    }
    System.out.println();
}

//deepToString打印
int[][] array1 = {{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(array1));

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值