认识数组(2)

目录

1、拷贝

1.1相关概念

 1.2常见拷贝方法

2、深拷贝与浅拷贝

2.1浅拷贝:

2.2深拷贝:

3、二维数组

3.1规则的二维数组:

3.2 不规则的二维数组:

 3.3二维数组的输出:


1、拷贝

1.1相关概念

当我们想使用某一对象的属性时,可以对其进行拷贝,这样就免去了创建一个新对象的过程。这种拷贝的方法叫做引用拷贝,也是我们在java中最基础的拷贝使用。引用拷贝也就是我们常用的对象赋值,这种方式不会生成新的对象,只会在原对象上增加了一个新的对象引用,两个引用指向的对象还是是同一个。

public class TestDemo {
    public static void main(String[] args) {
        int[] array={1,2,3,4};
        int[] copy=array;
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(copy));
        copy[0]=999;
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(copy));
    }
}

 运行结果:

 1.2常见拷贝方法

     for循环实现

 public static int[] copyArray(int[] array) {
        int[] copy = new int[array.length];
        for (int i = 0; i < array.length; i++) {
        copy[i] = array[i];
    }
    return copy;
}
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6};
        int[] ret = copyArray(array);
        System.out.println(Arrays.toString(ret));
    }

 

     clone():

此方法是类 Object 中的方法,可以创建一个有单独内存空间的对象。因为数组也是一个 Object 类,因此也可以使用数组对象的 clone() 方法来复制数组。clone() 方法的返回值是 Object 类型,要使用强制类型转换为适当的类型

int[] array = {1, 2, 3, 4, 5, 6};
int[] copy = array.clone();
System.out.println(Arrays.toString(copy))

 

     arraycopy():

第一个array表示原数组;第一个0 表示原数组中的起始索引;copy 表示目标数组;第二个0表示目标数组中的起始索引;array.length 表示要复制的数组长度。

int[] array = {1,2,3,4,5,6};
int[] copy = new int[array.length];
System.arraycopy(array,0,copy,0,array.length);
System.out.println(Arrays.toString(copy));

 

     copyOf():

复制数组至指定长度

其中,array 表示要进行复制的数组,array.length 表示复制后的新数组的长度。

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

 

     copyOfRange() :

 则将指定数组的指定长度复制到一个新数组中。

 array 表示原数组,1起始位置,4结束位置。

        int[] array= {1,2,3,4,5,6};
    	int[] copy= {7,8,9};
    	copy=Arrays.copyOfRange(array, 1,4);
    	System.out.println(Arrays.toString(copy));

 

以上几种方法都是浅拷贝(浅复制)。浅拷贝只是拷贝了对象的引用地址,两个内存地址指向同一个对象,所以修改其中任意的值,另一个值都会随之变化。深拷贝是将对象及值拷贝过来,两个对象修改其中任意的值另一个值不受影响。在拷贝中,区间为左开右闭。

2、深拷贝与浅拷贝

2.1浅拷贝:

对于基本数据类型:直接复制数据值;对于引用数据类型:只是复制了对象的引用地址,新旧对象指向同一个内存地址,修改其中一个对象的值,另一个对象的值也随之改变。


2.2深拷贝:

对于基本数据类型:直接复制数据值;对于引用数据类型:开辟新的内存空间,在新的内存空间里复制一个一模一样的对象,新老对象不共享内存,修改其中一个对象的值,不会影响另一个对象。

3、二维数组

3.1规则的二维数组:

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

 

3.2 不规则的二维数组:

 int[][] array2 = new int[2][];
 array2[0]=new int[3];
 array2[1]=new int[2];

 

 3.3二维数组的输出:

public static void main(String[] args) {
        int[][] array = {{1,2,3},{4,5,6}};
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }
}

 

 


 over

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值