• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

2d Array in Java schnell kopieren

Status
Für weitere Antworten geschlossen.

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Na dann lies doch als erstes bitte den grünen Thread und dann diesen Thread nochmal. Danach denkst du dann darüber nach was du gepostet hast. Danke.
 
Mitglied seit
01.06.2007
Beiträge
761
Reaktionen
0
grundriss.clone(); funktioniert leider nicht, da er da nur die Referenzen kopiert und das ist absolut inaktzeptabel, da wir das Array natürlich bearbeiten und somit auch das Ausgangsarray.
Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object:

The general intent is that, for any object x, the expression:

x.clone() != x

will be true, and that the expression:

x.clone().getClass() == x.getClass()

will be true, but these are not absolute requirements. While it is typically the case that:

x.clone().equals(x)

will be true, this is not an absolute requirement.

Zumindest für primitive Datentypen gibt clone() eine Kopie und keine Referenz zurück, daher sollte meine gepostete Methode funzen...
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Original geschrieben von Hans2000
Werde ich nicht. Nichts zu danken.
Okay...

Was das andere angeht postest du nichts, was nicht vorher schon gesagt wurde -> Spam.
 
Mitglied seit
01.06.2007
Beiträge
761
Reaktionen
0
Dann nimm dir Deinen eigenen Rat zu herzen, lies den Thread nochmal durch und denk drüber nach. Danke.
 

The_Company

Guest
x = int[1][1];
y = x.clone ();
x[0][0] = 5;
y[0][0] = 6;
System.out.println (x[0][0]);

Naaaaaa?
 
Mitglied seit
01.06.2007
Beiträge
761
Reaktionen
0
So, nochmal:

Code:
public static void main(String args[]) {
        int[][] x = new int[1][1];
	int[][] y = (int[][])x.clone();
	x[0][0] = 5;
	y[0][0] = 6;
	System.out.println (x[0][0]);
	
	int[][] z = new int[1][1];
	int[][] z1 = copyArray(z);
	z[0][0] = 5;
	z1[0][0] = 6;
	System.out.println (z[0][0]);
}
public static final int[][] copyArray (int[][] data)
{
        int[][] copy = (int[][])data.clone();
        for (int i = data.length - 1; i >= 0 ; i--)
        {
            if (data[i] != null)
                copy[i] = (int[])data[i].clone();
        }
        return copy;
}

Output:

Code:
run:
6
5

Naaaaaaa??

Es ist halt ein kleiner aber feiner Unterschied nur den ganzen Array oder auch noch die einzelnen "Unterarrays" zu clonen...
 
Mitglied seit
21.07.2002
Beiträge
545
Reaktionen
0
Ist die Funktion wirklich ein Problem ?
Und wenn ja, ist die Funktion wirklich das größte Problem bzw. gibt es da das größte Optimierungspotential bei entsprechendem Aufwand ?

1-Dimensionales Array verwenden. (Wenn die Funktion ein echtes Performance Problem ist wird sich schon ne Lösung fürs refactoring finden, auch wenn es recht viel aufwand ist. (regular expression replace im quelltext ?!)

Muss das Array so oft dupliziert werden ? Lassen sich nicht evtl. zumindest viele der new() aufrufe vermeiden, so dass nur die daten kopiert werden müssen ?

Und ansonsten halt ArrayCopy für die SubArrays benutzen und schauen wieviel das bringt.

Jetzt im nachhinein die Sprache zu wechseln oder irgendwas mit jni zu frickeln wird zu 99,9% nicht den gewünschten erfolg bringen ;)
 
Status
Für weitere Antworten geschlossen.
Oben