Effektives Kopieren eines zweidimensionalen Arrays in Java
Bei der Arbeit mit zweidimensionalen Arrays ist es oft notwendig, eine Kopie davon zu erstellen das ursprüngliche Array, um seine ursprünglichen Werte beizubehalten. Direkte Zuweisungen wie old = current können jedoch zu unbeabsichtigten Konsequenzen führen.
Grundlegendes zur Java-Array-Zuweisung
In Java sind Arrays Objekte und Zuweisungen zwischen Arrays Referenzen zum gleichen zugrunde liegenden Array. Daher wirkt sich die Aktualisierung eines Arrays auf das andere aus, da beide auf dieselben Daten verweisen.
Falsche Kopiermethoden
Die bereitgestellten Methoden old() und keepold(), Weisen Sie den Arrays einfach Referenzen zu. Wenn also „current“ nach dem Aufruf von „old()“ aktualisiert wird, werden die Änderungen auch in „old“ widergespiegelt. In ähnlicher Weise wird „current“ nach dem Aufruf von „keepold()“ zu einem Verweis auf „old“ und alle Aktualisierungen des „alten“ aktualisieren zum aktuellen Wert.
Effektives Kopieren mit der Streams-API (Java 8)
Um eine echte Kopie des Arrays zu erstellen, ist es notwendig, eine tiefe Kopie durchzuführen. Die in Java 8 eingeführte Streams-API bietet eine effiziente Möglichkeit, dies mithilfe des folgenden Codes zu erreichen:
int[][] copy = Arrays.stream(matrix).map(int[]::clone).toArray(int[][]::new);
Hier wird jede Zeile des Eingabearrays (Matrix in diesem Beispiel) mit map(int[]::clone) geklont, wodurch ein neues erstellt wird Array für jede Zeile. Der resultierende Strom geklonter Arrays wird dann mit toArray(int[][]::new) zurück in ein zweidimensionales Array konvertiert. Dieser Prozess stellt sicher, dass sowohl die Kopie als auch das ursprüngliche Array unterschiedlich sind und unabhängig voneinander geändert werden können.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3