Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Beides liefert eine unabhängige Kopie, aber copyOf ggf. mit einer anderen Länge. Sowas wie [JavaSpecialists 124] - Copying Arrays Fast ist interessant aber für neuere JDKs nicht mehr aktuell genug.
Hm, es ist (für mich) immer schwierig hinterher die Stellen mit ineffizienten Code zu finden. Aber gut, ich nehme nicht an dass die Methode wirklich viel Performance frisst ...
Ich habe ein finales Array von Pixeln (Größe zwischen 16*16 und 128*128), die als Vorlage zum verändern / zeichnen dienen. Um das zu machen kann sich ein Objekt eine "blanko" Kopie dieser Vorlage abholen. Dazu muss ich das Array (bzw dessen Inhalt) kopieren.
Es kann sein, dass sehr sehr oft neue Kopien gebraucht werden, somit wäre ich sehr erfreut wenn das kopieren selbst nicht allzuviel Zeit in Anspruch nimmt.
Der Zeitfaktor spielt bei 128*128 Pixel wirklich keine große Rolle.
Bei nem 2D array musst du beim kopieren allerdings etwas aufpassen. Du brauchst eine deep copy, ansonsten kann es sein dass sich Werte ändern wo sie es nicht sollen
Java:
int[][] arr = {{1,2,3},{4,5,6}};
int[][] copy = arr.clone();
copy[0][0] = 0;
for (int[] i : arr) {
System.out.println(Arrays.toString(i));
}
clone() fällt für dich also schon mal weg. Ich würde mir einfach ne kleine Hilfsmethode schreiben die dir ne tiefe Kopie eines Arrays erzeugt. Wenn dir da die Geschwindigkeit nicht reicht kannst du immer noch die Implementierung da mal austauschen.
Ja, man müßte genauer wissen, worum es geht. Was heißt "blanko"? Eine Kopie des aktuellen Zustands, die dann verändert werden kann? Muss es jedes mal eine neue Kopie sein, oder kann man nicht unterscheiden zwischen
int copy[] = getCopyOfCurrentValues();
und
initExisitingCopyWithCurrentValues(copy);
!?
(Wie viel unterschied das macht, müßte man aber noch austesten...)