鍍金池/ 教程/ Java/ Java數(shù)組復(fù)制
Java int數(shù)據(jù)類型
Java字符串開關(guān)(switch用法)
Java byte數(shù)據(jù)類型
Java字符串轉(zhuǎn)換
Java long數(shù)據(jù)類型
Java下劃線數(shù)字面量
Java可變長度數(shù)組
Java字符串算法
Java double數(shù)據(jù)類型
Java字符串搜索
Java boolean數(shù)據(jù)類型
Java原始數(shù)據(jù)類型
Java布爾包裝類
Java char數(shù)據(jù)類型
Java字符串比較
Java StringBuilder和StringBuffer用法
Java數(shù)據(jù)類型教程
Java數(shù)組復(fù)制
Java字符串編輯(修剪字符串)
Java字符數(shù)據(jù)類型
Java數(shù)組類型
Java數(shù)組參數(shù)
Java無符號數(shù)據(jù)類型
Java數(shù)組元素
Java字符串字符
Java字符串創(chuàng)建和長度
Java數(shù)值類型包裝器
Java自動裝箱和拆箱
Java數(shù)據(jù)類型簡介
Java short數(shù)據(jù)類型
Java字符串類型
Java float數(shù)據(jù)類型
Java多維數(shù)組
Java數(shù)據(jù)類型包裝器

Java數(shù)組復(fù)制

Java數(shù)組復(fù)制

以下代碼顯示了如何使用for 循環(huán)復(fù)制數(shù)組 -

import java.util.Arrays;

//from  w  w  w  .j  a va  2  s .com
public class Main {
    public static void main(String[] args) {
        int[] data = { 1, 2, 3, 4, 5 };

        // Expand the data array to 7 elements
        int[] eData = expandArray(data, 7);

        // Truncate the data array to 3 elements
        int[] tData = expandArray(data, 3);

        System.out.println("Original  Array: " + Arrays.toString(data));
        System.out.println("Expanded Array: " + Arrays.toString(eData));
        System.out.println("Truncated  Array: " + Arrays.toString(tData));

    }

    // Uses a for-loop to copy an array
    public static int[] expandArray(int[] oldArray, int newlength) {
        int originallength = oldArray.length;
        int[] newArray = new int[newlength];
        int elementsToCopy = 0;

        if (originallength > newlength) {
            elementsToCopy = newlength;
        } else {

            elementsToCopy = originallength;
        }
        for (int i = 0; i < elementsToCopy; i++) {
            newArray[i] = oldArray[i];
        }
        return newArray;
    }
}

上面的代碼生成以下結(jié)果。

Original  Array: [1, 2, 3, 4, 5]
Expanded Array: [1, 2, 3, 4, 5, 0, 0]
Truncated  Array: [1, 2, 3]

System.arraycopy

還可以使用System類的arraycopy()方法將數(shù)組的元素復(fù)制到另一個(gè)數(shù)組中。arraycopy()方法的簽名如下:

public static  void  arraycopy(Object sourceArray, 
                               int  sourceStartPosition, 
                               Object destinationArray,
                               int destinationStartPosition, 
                               int  lengthToBeCopied)

在上面方法,

  • sourceArray 是源數(shù)組。
  • sourceStartPosition 是源數(shù)組中要復(fù)制元素的起始索引。
  • destinationArray 是目標(biāo)數(shù)組。
  • destinationStartPosition 是目標(biāo)數(shù)組中要從源數(shù)組中復(fù)制新元素的起始索引。
  • lengthToBeCopied 是要復(fù)制的元素的數(shù)量。

可以用下面的代碼替換前面的for循環(huán)來實(shí)現(xiàn)數(shù)組復(fù)制:

System.arraycopy (ids,  0, tmyIDs, 0, elementsToCopy);

以下代碼顯示如何使用System.arraycopy復(fù)制數(shù)組。

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    int[] data = { 1, 2, 3, 4, 5 };

    // Copy data array to new arrays 
    int[] eData = new int[9];
    int[] tData = new int[2];
    System.arraycopy(data, 0, eData, 0, 5);
    System.arraycopy(data, 0, tData, 0, 2);

    System.out.println("Original  Array: " + Arrays.toString(data));
    System.out.println("Expanded Array: " + Arrays.toString(eData));
    System.out.println("Truncated  Array: " + Arrays.toString(tData));
  }
}

上面的代碼生成以下結(jié)果。

Original  Array: [1, 2, 3, 4, 5]
Expanded Array: [1, 2, 3, 4, 5, 0, 0, 0, 0]
Truncated  Array: [1, 2]

數(shù)組克隆

可以使用數(shù)組的clone()方法創(chuàng)建數(shù)組的副本。對于原始類型,克隆的數(shù)組將具有原始數(shù)組的真實(shí)副本。
但是,對于引用類型,存儲在數(shù)組中的每個(gè)元素的對象引用將復(fù)制到克隆的數(shù)組。這被稱為淺拷貝。在淺拷貝中,兩個(gè)數(shù)組的元素(原始和克隆)指向內(nèi)存中的同一個(gè)對象。

下面的代碼演示了一個(gè)int數(shù)組和一個(gè)String數(shù)組的克隆。

public class Main {
  public static void main(String[] args) {
    // Create an array of 3 integers 1,2,3
    int[] ids = { 1, 2, 3 };
    int[] clonedIds = (int[]) ids.clone();

    // Create an array of 3 strings.
    String[] names = { "A", "B", "C" };
    String[] clonedNames = (String[]) names.clone();
  }
}