Kopieren von zweidimensionalen Arrays in Java
Bei der Arbeit mit mehrdimensionalen Arrays in Java ist es oft notwendig, eine Kopie des Arrays zu erstellen Vermeiden Sie unerwartete Änderungen am ursprünglichen Array. Durch das Erstellen einer Kopie wird sichergestellt, dass das ursprüngliche Array unberührt bleibt, während die Kopie frei geändert werden kann, ohne das Original zu beeinträchtigen.
Stellen Sie sich das folgende Szenario vor, in dem zwei 2D-Arrays, das aktuelle und das alte, deklariert und zwei Hilfsmethoden definiert werden :
<code class="java">int[][] current; int[][] old; public void old() { old = current; } public void keepold() { current = old; }</code>
Beim Aufruf von old() wird die Referenz auf das aktuelle Array dem alten Array zugewiesen. Ebenso wird beim Aufruf von keepold() der Verweis auf das alte Array dem aktuellen Array zugewiesen. Durch diese einfache Zuordnung wird jedoch keine Kopie der tatsächlichen Daten erstellt. Stattdessen teilt es lediglich dieselben Verweise auf dieselben zugrunde liegenden Daten.
Dieses Verhalten kann zu Verwirrung führen, wenn Aktualisierungen an einem der Arrays vorgenommen werden. Wenn beispielsweise eine Aktualisierung von „current“ durchgeführt und dann „keepold()“ aufgerufen wird, verweist das aktuelle Array nun auf dieselben Daten wie „old“. Infolgedessen verändern alle weiteren Änderungen an der alten Version auch die aktuelle Version, was nicht das beabsichtigte Verhalten ist.
Um eine echte Kopie eines 2D-Arrays in Java zu erstellen, muss eine Technik namens Deep Copying eingesetzt werden. Dabei wird ein neues 2D-Array erstellt und der Inhalt des ursprünglichen Arrays Element für Element hineinkopiert. Dies kann mithilfe einer verschachtelten Schleife erreicht werden.
Alternativ kann ab Java 8 die Streams-API verwendet werden, um eine präzisere und effizientere Möglichkeit zum Durchführen von Deep Copy von mehrdimensionalen Arrays bereitzustellen:
<code class="java">int[][] copy = Arrays.stream(matrix).map(int[]::clone).toArray(int[][]::new);</code>
In diesem Code erstellt Arrays.stream(matrix) einen Stream der Zeilen im ursprünglichen Array. Die Operation „map(int[]::clone)“ erstellt mit der Methode „clone()“ ein neues Array für jede Zeile. Schließlich kombiniert die toArray(int[][]::new)-Operation die geklonten Zeilen zu einem neuen 2D-Array. Dieses resultierende Array ist eine echte Kopie und kann geändert werden, ohne dass sich dies auf das ursprüngliche Array auswirkt.
Das obige ist der detaillierte Inhalt vonWie kann ich in Java eine echte Kopie eines 2D-Arrays erstellen, ohne das ursprüngliche Array zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!