wie clont sich eine TreeMap?

Status
Nicht offen für weitere Antworten.
P

paul3

Mitglied
Hallo!

Ich wollte mal wissen, wie sich denn eine TreeMap selber klont. Deshalb hab ich mir die source dateien von sun angeschaut.
Code:
public class TreeMap<K,V>
    extends AbstractMap<K,V>
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable
und hier die clone() Methode:
Code:
 public Object clone() {
        TreeMap<K,V> clone = null;
        try {
            clone = (TreeMap<K,V>) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new InternalError();
        }

        // Put clone into "virgin" state (except for comparator)
        clone.root = null;
        clone.size = 0;
        clone.modCount = 0;
        clone.entrySet = null;
        clone.navigableKeySet = null;
        clone.descendingMap = null;

        // Initialize clone with our mappings
        try {
            clone.buildFromSorted(size, entrySet().iterator(), null, null);
        } catch (java.io.IOException cannotHappen) {
        } catch (ClassNotFoundException cannotHappen) {
        }
Wie wir sehen, greift die clone() Methode aus TreeMap mit
auf die clone() methode der Obeklasse zurück, und präpariert dann die geklonte Map noch vorm returnen. Ich muss mir also die Oberklasse anschaun, um zu verstehen, wie sich die TreeMap clont - also die AbstractMap ??
Code:
public abstract class AbstractMap<K,V> implements Map<K,V> {
und hier die clone() Methode:
Code:
 protected Object clone() throws CloneNotSupportedException {
        AbstractMap<K,V> result = (AbstractMap<K,V>)super.clone();
        result.keySet = null;
        result.values = null;
        return result;
    }
Greift die TreeMap mit super.clone() also auf diese Methode zurück? Wenn ja, worauf greift dann in AbstractMap super.clone() zurück? AbstractMap extended ja keine Klasse sondern implementiert nur eine Interface...
 
B

Bit2_Gosu

Bekanntes Mitglied
Ich bin mir nicht sicher, aber vielleicht verweist super() aus der TreeMap ja auf die Klasse Objekt und nicht auf AbstractMap.
 
P

paul3

Mitglied
Wieso die Oberklasse von TreeMap ist doch AbstractMap oder nicht??

Ich verstehe wirklich nicht ganz, an welcher Stelle, denn jetzt eine Funktion steht, die auch wirklich klont und nicht nur mit super() auf eine überliegende clone() Funktion verweist.
 
G

Guest

Gast
Die clone() Methode ist in Object native implementiert. In überschreibenden Klassen muss man "nur" mutable und nicht primitive
Attribute klonen. Desweiteren muss die Klasse das Interface Cloneable implementieren. Es ist ähnlich wie Serializable
ein reines Marker-Interface. All dies ist in der Beschreibung von Object#clone() und in der API Doku von Clonable beschrieben.
 
S

Shadeo

Mitglied
public abstract class AbstractMap<K,V>
extends Object
implements Map<K,V>

Object hat ne Methode clone()
 
musiKk

musiKk

Top Contributor
Die ist aber nicht implementiert und wirft beim Aufruf eine Exception. Um die API Dokumentation zu zitieren:
The class Object does not itself implement the interface Cloneable, so calling the clone method on an object whose class is Object will result in throwing an exception at run time.
Hab auch eben mal was aehnliches nachgebaut und steh ebenfalls auf dem Schlauch.
 
P

paul3

Mitglied
Das hatte ich mir auch überlegt, dass alle Klassen letztendlich eine Unterklasse der "Object" Klasse sind. Dann verweist das super() in der clone() Funktion aus AbstractMap also auf die clone() Funktion der Klasse "Object".

Nur blöderweise, sieht die clone() Funktion in "Object" so aus:
Code:
protected native Object clone() throws CloneNotSupportedException;
Dieser Funktionskopf ist ja wohl nicht in der Lage irgendwas zu klonen oder doch?
 
S

Shadeo

Mitglied
Die Methode ist native, die wird vermutlich in C programmiert sein

Fremdfunktionen werden innerhalb des Java-Codes wie normale Methoden deklariert. Der einzige Unterschied ist das zusätzliche Schlüsselwort native. Parameter und Rückgabewert werden ebenfalls als Java-Datentypen bzw. Objekte angegeben. Der C-Code, der die Funktion implementiert, wird übersetzt und zu einer shared library gebunden. Diese Bibliothek wird beim Instantiieren der Klasse über einen static initializer automatisch geladen. Hierdurch wird die Implementierung der Fremdfunktion auf die Deklaration der native method abgebildet
 
P

paul3

Mitglied
Ah ok, das erklärt einiges :wink:

Gibt es einen Sinn dafür, irgendwann native Funktionen einzusetzen ? Wäre es nicht viel schöner in immer kleineren Teilen nach unten zu gehen und dort mit assembler zu arbeiten ?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
IamArctic Quaxli Tutorial, Rotorblätter bewegen sich nicht mehr Java Basics - Anfänger-Themen 4
M Java GUI label ändert sich erst zum Schluss Java Basics - Anfänger-Themen 4
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
J CMD schließt sich automatisch Java Basics - Anfänger-Themen 5
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
F boolean stellt sich auf true Java Basics - Anfänger-Themen 15
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
H Punkt bewegt sich auf einer Ellipse Java Basics - Anfänger-Themen 6
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
W Client verbindet sich nicht Java Basics - Anfänger-Themen 14
J Mein Programm beendet sich ohne mein Zutun Java Basics - Anfänger-Themen 9
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
K Zufalsszahl soll sich nicht wiederholen Java Basics - Anfänger-Themen 9
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
UnknownInnocent Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
UnknownInnocent Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
K Sysout wiederholt sich Java Basics - Anfänger-Themen 6
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
T Schleife fährt sich fest Java Basics - Anfänger-Themen 14
E App lässt sich nicht starten Java Basics - Anfänger-Themen 8
ZotacZ Best Practice Lohnt es sich in GWT einzuarbeiten? Java Basics - Anfänger-Themen 4
E Pdf-Document lässt sich im Servlet nicht öffnen Java Basics - Anfänger-Themen 5
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
S String ändert sich nicht Java Basics - Anfänger-Themen 2
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
P Compiler-Fehler Wo befindet sich hier der Fehler und warum? Java Basics - Anfänger-Themen 21
F MouseMotionListener - Objekt bewegt sich nicht Java Basics - Anfänger-Themen 1
S Erste Schritte Java Applet lässt sich im Browser nicht öffnen Java Basics - Anfänger-Themen 9
G Was hat es mit java.net.* auf sich? Java Basics - Anfänger-Themen 10
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
J Kann eine .jar sich selber Löschen? Java Basics - Anfänger-Themen 5
OlafHD Java Uhrzeit aktualisiert sich nicht Java Basics - Anfänger-Themen 2
J Java Datei lässt sich nicht kompilieren Java Basics - Anfänger-Themen 3
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
W OOP Zwei Objekte beziehen sich aufeinander (Zirkelbezug)? Java Basics - Anfänger-Themen 4
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
S Variable (int) erhöht sich nicht richtig Java Basics - Anfänger-Themen 18
B Konsole schließt sich sofort Java Basics - Anfänger-Themen 8
Fishmeaker Methoden mit Methoden aufrufen - Programm hängt sich auf Java Basics - Anfänger-Themen 5
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
T Methoden [GELÖST ]Warum ruft sich die Methode von alleine auf? Java Basics - Anfänger-Themen 3
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
Lord.Djerun (Netbeans) Bei TimeUnit.Seconds,Sleep() hängt sich das komplette Programm auf.. Java Basics - Anfänger-Themen 8
P Programm lässt sich nicht starten - Klasse mit Hauptmethode nicht gefunden Java Basics - Anfänger-Themen 9
B Compiler-Fehler [Lejos] [RCX] Programm lässt sich nicht kompilieren Java Basics - Anfänger-Themen 5
N Variablen Array-Variable verändert sich Java Basics - Anfänger-Themen 12
HoloYoitsu BufferedReader verhält sich seltsam Java Basics - Anfänger-Themen 10
S Programm verhält sich in Eclipse anders, als ein eigenständiges Programm Java Basics - Anfänger-Themen 5
N Von Kopf bis Fuss TestArrays lässt sich nicht lösen Java Basics - Anfänger-Themen 5
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
T GUI öffnet sich nicht Java Basics - Anfänger-Themen 23
G Java lässt sich nicht installieren Java Basics - Anfänger-Themen 1
L0MiN Datei lässt sich nicht ausführen Java Basics - Anfänger-Themen 3
V welche Methode am besten sich für JPG einfügung in Java anzugewöhnen ? Java Basics - Anfänger-Themen 4
E statische Variable ändert sich Java Basics - Anfänger-Themen 7
P Threads Objekt bewegt sich nicht. Java Basics - Anfänger-Themen 12
M Eclipse startet nicht mehr (eclipse.exe beendet sich selbst)? Java Basics - Anfänger-Themen 5
A Dinge lassen sich nicht importieren Java Basics - Anfänger-Themen 7
A JDialog öffnet sich nicht Java Basics - Anfänger-Themen 7
F Erste Schritte Sich nicht ständig verrennen? Java Basics - Anfänger-Themen 11
M Java Datei soll sich selbst löschen Java Basics - Anfänger-Themen 8
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
M Spaltenbreite läßt sich nicht anpassen Java Basics - Anfänger-Themen 0
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
H Heap-Auslasung verdoppelt sich schlagartig Java Basics - Anfänger-Themen 3
P Eingabeaufforderung hängt sich auf Java Basics - Anfänger-Themen 2
A Java-Zeilenprogramm lässt sich nicht exportieren Java Basics - Anfänger-Themen 13
T Kalender irrt sich Java Basics - Anfänger-Themen 8
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
R Methoden Main-Methode verhält sich in .jar anders als in Eclipse Java Basics - Anfänger-Themen 2
G zwei Objekte bewegen - der eine bewegt sich nicht flüssig? Java Basics - Anfänger-Themen 10
H Worauf bezieht sich die erste else-Anweisung Java Basics - Anfänger-Themen 9
L Eclipse.exe öffnet sich nicht. Java Basics - Anfänger-Themen 7
S Programm hängt sich auf Java Basics - Anfänger-Themen 2
A Lässt sich dieser Ausdruck irgendwie einfacher schreiben? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben