Javaレプリケーション配列のいくつかの方法


配列レプリケーションのいくつかの一般的な使い方[1 D]
  • System.arraycopyの用法
           int[] src = {1,3,5,7,9,11,13,15,17};
    
           int[] dest = {2,4,6,8,10,12,14,16,18,20};
    
           // src              , 1,3,5   dest 2          
    
           System.arraycopy(src, 0, dest, 1, 3);
    
           System.out.println(Arrays.toString(dest));
    結果:[2,1,3,5,10,12,14,16,18,20]
  • Arrays.copyOfの用法
         int[] src = {1,3,5,7,9,11,13,15,17};
    
          int[] dest = {2,4,6,8,10,12,14,16,18,20};
    
        //copyOf(   src   0              )
    
    int[] copyof=Arrays.copyOf(src, 2);
    
          System.out.println(Arrays.toString(copyof));
    の結果:[1,3]
  • Arrays.copyOfRangeの用法
         int[] src = {1,3,5,7,9,11,13,15,17};
    
          int[] dest = {2,4,6,8,10,12,14,16,18,20};
    
    //copyRange( src    0                    ,     )
    
          int[] copyofRange=Arrays.copyOfRange(src, 2,6);
    
          System.out.println(Arrays.toString(copyofRange));
    の結果:[5,7,9,11]
  • 浅いコピーと深いコピー[2 D配列コピーを含む]
    配列int[]a={3,1,4,2,5}を定義します.int[] b=a; 配列bは、配列aに対するもう一つの参照、すなわち浅いコピーにすぎない.配列bの要素の値を変更すると、実は配列aの要素の値を変更します.
    深さレプリケーションを実現するには、cloneまたはSystem.arrayCopyを次のコード1 int[]a={3,1,4,2,5}のように使用します.2 int[] b=a.clone(); 3 b[0]=10; 4 System.out.println(b[0]+""+a[0]);出力は10 3でbの値は変更されたが、aの要素の値は変更されなかった
    ただしcloneとSystem.arrayCopyは、いずれも1次元配列の深さコピーです.2次元配列の場合
    int[][] a={{3,1,4,2,5},{4,2}};
    int[][] b=a.clone();
    b[0][0]=10;
    System.out.println(b[0][0]+"  "+a[0][0]);

    出力が10 10なのでcloneは2次元配列に直接作用しないJavaには2次元配列の概念がなく、配列の配列しかないため、2次元配列aに格納されているのは実際には2つの1次元配列の参照である.clone関数を呼び出すと、この2つの参照がコピーされる.証明するには、次の出力を見るだけである
    int[][] a={{3,1,4,2,5},{4,2}};
    int[][] b=a.clone();
    b[0][0]=10;
    System.out.println(b[0][0]+"  "+a[0][0]);
    System.out.println(a[0]==b[0]);

    5文目の出力はtrueです.
    cloneで2 D配列をコピーし、各次元でclone関数を呼び出す
    int[][] a={{3,1,4,2,5},{4,2}};
    int[][] b=new int[a.length][];
    for(int i=0;i0][0]=10;
    System.out.println(b[0][0]+"  "+a[0][0]);
    System.out.println(b[0]==a[0]);

    出力は10 3 false