Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java array-kopieertechnieken: een uitgebreide gids

Java array-kopieertechnieken

Leer hoe je eendimensionale en tweedimensionale arrays in Java kunt dupliceren met toewijzing, lussen, System.arraycopy, Arrays.copyOfRange en meer, met duidelijke voorbeelden en best-practice-tips.


1. Kopiëren met de toewijzingsoperator

Het toewijzen van de ene array-variabele aan de ander is de simpelste methode. Het kopieert de referentie, niet de data.

class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6};
        int[] positiveNumbers = numbers; // referentie-kopie
        for (int number : positiveNumbers) {
            System.out.print(number + ", ");
        }
    }
}

Output:

1, 2, 3, 4, 5, 6

Zowel numbers als positiveNumbers wijzen nu naar hetzelfde array-object. Het wijzigen van één element beïnvloedt de ander:

class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6};
        int[] positiveNumbers = numbers;
        numbers[0] = -1;
        for (int number : positiveNumbers) {
            System.out.print(number + ", ");
        }
    }
}

Output:

-1, 2, 3, 4, 5, 6

Dit is een shallow copy. Om ongewenste bijwerkingen te vermijden, gebruik een deep-copy-techniek.


2. Deep copy met een lus

Itereren over elk element en toewijzen aan een nieuwe array creëert een onafhankelijke kopie.

import java.util.Arrays;

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

Output:

[1, 2, 3, 4, 5, 6]

Omdat source en destination verschillende objecten zijn, beïnvloeden wijzigingen aan de ene de andere niet.


3. System.arraycopy() gebruiken

Java's System.arraycopy-methode biedt een snelle, ingebouwde manier om array-segmenten te kopiëren.

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  • src – bronarray
  • srcPos – startindex in de bron
  • dest – bestemming-array
  • destPos – startindex in de bestemming
  • length – aantal te kopiëren elementen

Voorbeeld:

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[] n1 = {2, 3, 12, 4, 12, -2};
        int[] n2 = new int[n1.length];
        System.arraycopy(n1, 0, n2, 0, n1.length);
        System.out.println("n2 = " + Arrays.toString(n2));
        int[] n3 = new int[5];
        System.arraycopy(n1, 2, n3, 1, 2);
        System.out.println("n3 = " + Arrays.toString(n3));
    }
}

Output:

n2 = [2, 3, 12, 4, 12, -2]
n3 = [0, 12, 4, 0, 0]

4. Kopiëren met Arrays.copyOfRange()

Als je een nieuwe array nodig hebt die een specifieke slice bevat, is Arrays.copyOfRange ideaal.

import java.util.Arrays;

class ArraysCopy {
    public static void main(String[] args) {
        int[] source = {2, 3, 12, 4, 12, -2};
        int[] destination1 = Arrays.copyOfRange(source, 0, source.length);
        System.out.println("destination1 = " + Arrays.toString(destination1));
        int[] destination2 = Arrays.copyOfRange(source, 2, 5);
        System.out.println("destination2 = " + Arrays.toString(destination2));
    }
}

Output:

destination1 = [2, 3, 12, 4, 12, -2]
destination2 = [12, 4, 12]

5. 2D-arrays kopiëren met een lus

Deep copy van een tweedimensionale array vereist het kopiëren van elke rij afzonderlijk.

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[][] source = {
            {1, 2, 3, 4},
            {5, 6},
            {0, 2, 42, -4, 5}
        };
        int[][] destination = new int[source.length][];
        for (int i = 0; i < destination.length; ++i) {
            destination[i] = new int[source[i].length];
            for (int j = 0; j < destination[i].length; ++j) {
                destination[i][j] = source[i][j];
            }
        }
        System.out.println(Arrays.deepToString(destination));
    }
}

Output:

[[1, 2, 3, 4], [5, 6], [0, 2, 42, -4, 5]]

6. 2D-array kopiëren met System.arraycopy()

Vervang de innerlijke lus met arraycopy voor schonere code.

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[][] source = {
            {1, 2, 3, 4},
            {5, 6},
            {0, 2, 42, -4, 5}
        };
        int[][] destination = new int[source.length][];
        for (int i = 0; i < source.length; ++i) {
            destination[i] = new int[source[i].length];
            System.arraycopy(source[i], 0, destination[i], 0, destination[i].length);
        }
        System.out.println(Arrays.deepToString(destination));
    }
}

Output:

[[1, 2, 3, 4], [5, 6], [0, 2, 42, -4, 5]]

Java

  1. C# Arrays: Declaratie, Initialisatie en Operaties
  2. C++ Arrays Ontmaskerd: Declaratie, Initialisatie en Pointer‑Technieken
  3. C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
  4. Java-operators beheersen: typen, syntax en praktische voorbeelden
  5. Java-commentaar: typen, gebruik en best practices
  6. Java interfaces meesteren: concepten, implementatie en best practices
  7. Java Try-with-resources meesteren: automatische resource management uitgelegd
  8. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  9. Java Arrays Tutorial: Declaratie, Creatie en Initialisatie – Voorbeeldcode
  10. Een Array van Objecten in Java aanmaken: Stap-voor-stap gids
  11. Bubble Sort in Java beheersen: Duidelijk voorbeeld & stapsgewijze walkthrough