clone() und casts umschreiben

Booyeoo

Mitglied
Hallo,

ich habe ein kleines Performanceproblem und habe auch schon den übeltäter eigentlich ausfindig gemacht. Es ist der Aufruf der clone Methode in Kombination eines casts (der glaube ich normal an der stelle ist), welcher die Laufzeit fast verdoppelt...

Allerdings verstehe ich nicht wieso meine Lösung, also mein umweg, einmal klappt und einmal nicht.

Zunächst einmal das was klappt:

Legende:
stmFilteredAMC und tempTmCandidate sind eine TreeMap<String, TreeMap<Integer, double[]>>.

Der Befehl in Zeile 2596 macht die Probleme und wurde mit der oberen for Schleife erfolgreich umschrieben.

[JAVA=2588]
for (String key2 : tempTmCandidate.keySet()) {
// nehme die kandidtaen treemap und füge alle elemente des entsprechenden frames hinzu zur
// gefilterten treemap
TreeMap<Integer,double[]> temptm2 = tempTmCandidate.get(key2);
TreeMap<Integer,double[]> newtm2 = stmFilteredAMC.get(key2);
newtm2.put(newtm2.lastKey()+1,temptm2.get(temptm2.lastKey()));
stmFilteredAMC.put(key2, newtm2);
}
//stmFilteredAMC = (TreeMap<String, TreeMap<Integer, double[]>>) tempTmCandidate.clone();
// der clone befehl dauert fast doppelt so lange wie die obere for schleife!!!
/*

[/code]


So analog dazu habe ich die innerhalb vorrausgegangener Methode einen anderen clone Befehl zu ersetzen, leider fehlerhaft, da immer nur das letzte Array sich in der TreeMap für alle keys wiederfindet. Hier sieht es so aus als würde irgendeine Referenz bestehen bleiben.

Legende:
Hier soll lediglich die TreeMap tempTm die TreeMap von stmFilteredAMC für den entsprechenden Key bekommen.
Die For-Schleife soll den auskommentierten Aufruf in Zeile 2551 ersetzen.

[JAVA=2545]
for (Integer frametemp : stmFilteredAMC.get(key).keySet()){
//hier müsste irgendwas falsch sein - auch wenn ich hier clone() verwende funktioniert es nicht richtig.
// wieso ist die forschleife nicht äquivalent zu dem clone befehl von unten? hat jemand eine idee?
double[] tmpA=stmFilteredAMC.get(key).get(frametemp)/*.clone()*/;
tempTm.put(frametemp, tmpA);
}
// tempTm = (TreeMap<Integer, double[]>) stmFilteredAMC.get(key).clone();
[/code]

Meine Frage also in Zeiel 2548 verewigt. Weiß jemand wieso die forschleife nicht äquivalent ist zu der zeile mit dem cloneaufruf?

Danke für jede Antwort.
Grüße
 
M

maki

Gast
Ohne jetzt auf die Details deines Quelltextes einzugehen(mir scheint du hast etwas viel in eine Klasse gepackt), was für ein Objekt soll denn geklont werden, oder sind das verschiedene?
 

FArt

Top Contributor
Muss es den ein Clon der Map sein? Wenn nein, vielleicht ist der Copyconstructor (der Konstruktor mit Map als Parameter) das, was du eigentlich machen wolltest. Wenn du tatsächlich einen Clone benötigst, dann wirst du um etwas Arbeit (und Performanceverlust) u.U. nicht herumkommen.
 

Booyeoo

Mitglied
Wenn nein, vielleicht ist der Copyconstructor (der Konstruktor mit Map als Parameter)

Eine Kopie ist ja das was ich brauche, denke ich, wobei du mich jetzt ein wenig verwirrst, was ist denn eigentlich der Unterschied zwischen Kopie und Klon? Es wird doch in beiden Fällen ein neues Objekt angelegt, wobei bei der Kopie kein manuelles Cast mehr erforderlich ist?

Du meinst also:
Java:
 tempTm = new TreeMap<Integer, double[]>(stmFilteredAMC.get(key));
?

Hab das ausprobiert und es klappt, allerdings spricht die Zeit dann leider doch eher fürs clone()... ist um 300ms schneller bei meinen 1000 Frames die in den Tests verarbeitet werden. wobei die zeiten auch in dem bereich von 300ms schwanken, d.h. hier macht es anscheinend keinen großen unterschied ob ich es klone oder kopiere, wobei klonen im schnitt schneller ist. aber danke für den hinweis. gibt es den copy konstruktur bei allen objekten?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Compiler-Fehler SupressWarning für clone() Java Basics - Anfänger-Themen 6
S Copy - Constructor vs clone() Java Basics - Anfänger-Themen 20
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
B Klasse: Methode Clone Java Basics - Anfänger-Themen 5
Q Methode clone() bei Vererbung Java Basics - Anfänger-Themen 5
U "Clone" Fragen Java Basics - Anfänger-Themen 3
Luk10 Arrays.copy(myArray) vs myArray.clone() Java Basics - Anfänger-Themen 9
H Interface clone-Methode in Interface Java Basics - Anfänger-Themen 6
A Shallow copy .super.clone() Java Basics - Anfänger-Themen 2
B Deep Clone Java Basics - Anfänger-Themen 12
K clone() Java Basics - Anfänger-Themen 12
D probs mit clone und equals Java Basics - Anfänger-Themen 10
S Eigenes Objekt temporär verändern? (Clone)? Java Basics - Anfänger-Themen 12
T Deep Clone Java Basics - Anfänger-Themen 3
I clone() und Referenzen Java Basics - Anfänger-Themen 25
E Vector und clone() Java Basics - Anfänger-Themen 6
M Brauch ich dazu clone()? Java Basics - Anfänger-Themen 5
C Frage zu clone() Java Basics - Anfänger-Themen 2
B clone(), Clonable und Felder von Interfacetypen Java Basics - Anfänger-Themen 3
G Frage zu clone() Java Basics - Anfänger-Themen 6
G Problem clone und Vektor Java Basics - Anfänger-Themen 4
P Clone Methode treibt mich zum Wahnsinn Java Basics - Anfänger-Themen 10
M Arrays clonen mit clone() scheint nicht zu funktionieren Java Basics - Anfänger-Themen 4
S JPanel mit clone() duplizieren Java Basics - Anfänger-Themen 4
S Objekt klonen mit clone() Java Basics - Anfänger-Themen 3
B Datentypen Casts typesafe machen? ("unchecked") Java Basics - Anfänger-Themen 10
C Datentypen Casts bei Listelementtypen Java Basics - Anfänger-Themen 4
G Vector, equal & Casts Java Basics - Anfänger-Themen 5
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Layouts umschreiben ? Java Basics - Anfänger-Themen 8
Zeppi Integer umschreiben Java Basics - Anfänger-Themen 5
Sajeel Chattha Dieses Programm umschreiben Java Basics - Anfänger-Themen 5
A Code umschreiben Java Basics - Anfänger-Themen 6
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
C else in if umschreiben Java Basics - Anfänger-Themen 2
U Umschreiben ohne main methode ;-) Java Basics - Anfänger-Themen 8
D Von For in While umschreiben Java Basics - Anfänger-Themen 13
A Fehler beim Umschreiben in Array Java Basics - Anfänger-Themen 6
T Umschreiben von switch in if else und umgekehrt Java Basics - Anfänger-Themen 9
M Problem mit Jframe nach JApplet umschreiben Java Basics - Anfänger-Themen 2
3 Eine HTML Datei in eine Java Datei umschreiben Java Basics - Anfänger-Themen 23
S Wie umschreiben ? Java Basics - Anfänger-Themen 2
S Applet in Applikation umschreiben? Java Basics - Anfänger-Themen 2
G in compareTo umschreiben Java Basics - Anfänger-Themen 4
ff int in byte[] umschreiben Java Basics - Anfänger-Themen 12
B Schleife in andere Schleife umschreiben Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben