Java-配列コピー

配列コピー

まず
ディープコピーとシャローコピー配列の4つのコピー方法を理解ます

1.Forループコピー

コード例:

import java.util.Arrays;

public class TestDemo{
    
    
    public static void main(String[] args) {
    
    
        int[] array1 ={
    
    1,2,3,4,5,6};
        int[] array2 =new int [array1.length];
        for (int i = 0; i <array1.length ; i++) {
    
    
            array2[i] = array1[i];
        }
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
    }
}

結果:
ここに写真の説明を挿入
この時点で、array2 0添え字の値を変更し、array1に影響がないことを確認します。

import java.util.Arrays;

public class TestDemo{
    
    
    public static void main(String[] args) {
    
    
        int[] array1 ={
    
    1,2,3,4,5,6};
        int[] array2 =new int [array1.length];
        for (int i = 0; i <array1.length ; i++) {
    
    
            array2[i] = array1[i];
        }
        System.out.println("==============");
        array2[0]=99;
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
    }
}

結果:
ここに写真の説明を挿入
配列オブジェクトが作成され、元の配列のすべての要素が新しい配列にコピーされます。したがって、元の配列を変更しても新しい配列には影響しません。つまり、参照を介してコピーされた値を変更し、元のオブジェクトの値には影響しません。このコピーはディープコピーです。

2.コピーのコピー

コード例:

public static void main(String[] args) {
    
    
        int[] array1 = {
    
    1,2,3,4,5,6};
        System.out.println(Arrays.toString(array1));
        int[] array2 = Arrays.copyOf(array1,array1.length);
        System.out.println("==============");
        array2[0]=99;
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
    }

結果:
ここに写真の説明を挿入
最初のものと同じ:copyOfは配列のディープコピーです。つまり、別の配列オブジェクトが作成され、元の配列のすべての要素が新しい配列にコピーされます。したがって、元のアレイを変更しても、新しいアレイには影響しません。

3.System.arraycopyコピー

ここに写真の説明を挿入

import java.util.Arrays;
public class TestDemo {
    
    
    public static void main(String[] args) {
    
    
        int[] array1 = {
    
    1, 2, 3, 4, 5, 6};
        int[] array2 = new int[array1.length];
        System.out.println(Arrays.toString(array1));
        System.arraycopy(array1, 0, array2, 0, array1.length);
        System.out.println("==============");
        array2[0] = 99;
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
    }
}

結果:
ここに写真の説明を挿入
System.arraycopyのコピーもディープコピーです。

最初の3つのコピー方法の最速のコピーはSystem.arraycopyコピーです。

4.クローンコピー

   引用.clone
         克隆  这个引用所指向的对象
         这个引用所指向的对象就会被克隆(生成一个副本)

コード例;

public static void main(String[] args) {
    
    
        int[] array1 = {
    
    1, 8, 9, 4, 13, 26};
        System.out.println(Arrays.toString(array1));
        //array2 指向了刚刚生成的副本
        int [] array2 = array1.clone();
        System.out.println("==============");
        array2[0] = 99;
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
    }

結果:
ここに写真の説明を挿入
この時点で、元のアレイを変更しても新しいアレイに影響がないこともわかります。したがって、これもディープコピーです。
実際、本質的に、これらの4つのタイプは浅いコピーに属します
。上記の4つが深いコピーに属する理由は、単純なタイプがちょうど今配列に格納されているためです。参照型
を置くと、それらはすべて浅いコピーです。シャローコピーを説明するための図参照型が配列に格納されている場合、array2の要素の値を変更し、array1の値も変更します。このメソッドはシャローコピーと呼ばれますそれをディープコピーに変更するにはどうすればよいですか?array1をコピーするときは、それが参照する値もコピーします。このとき、図に示すように、array2の要素の値を変更し、array1の値は変更されません。

ここに写真の説明を挿入


ここに写真の説明を挿入

総括する:

これらの4つの配列コピー方法は浅いコピーです

いくつかの小さな知識ポイント:

1.配列の一部をコピーします。

コード例:

public static void main(String[] args) {
    
    
        int[] array1 = {
    
    2, 8, 9, 10, 12, 26};
        int[] ret = Arrays.copyOfRange(array1,2,5);
        System.out.println(Arrays.toString(ret));
    }

結果:
ここに写真の説明を挿入

2.2つのアレイを比較します

コード例:

public static void main(String[] args) {
    
    
        int[] array1 = {
    
    2, 8, 9, 10, 12, 26};
        int[] array2 = {
    
    2, 8, 9, 10, 12, 26, 30,35};
        System.out.println(Arrays.equals(array1, array2));
    }

結果:
ここに写真の説明を挿入

3.アレイが完全に満たされている

コード例:

public static void main(String[] args) {
    
    
        int[] array1 =new int[10];
        Arrays.fill(array1,6);
        System.out.println(Arrays.toString(array1));
    }

結果:
ここに写真の説明を挿入

4.部分的に満たされた配列

コード例:

public static void main(String[] args) {
    
    
        int[] array1 =new int[10];
        Arrays.fill(array1,2,6,8);
        System.out.println(Arrays.toString(array1));
    }

結果:
ここに写真の説明を挿入
終了しました。(私の人生を取りなさい)

おすすめ

転載: blog.csdn.net/weixin_44436675/article/details/112012315