Implementation von Zugriffen auf Object[index] in der JVM

Status
Nicht offen für weitere Antworten.
M

max_ray

Gast
Hallo!

Mich würde interessieren ob ich bei dem aufruf eines .get(index) einer java.util.LinkedList dieselbe Laufzeit habe als ob ich ein java.util.Array verwende (ebenfalls .get(index)).

Wenn ich die Methoden im JRE anschaue sehe ich leider nur die Implementation der LinkedList (die wie erwartet mit einer FOR Schleife durch die Elemente iteriert), die durch die Implementation eine lineare Laufzeit hat.

Bei einem Array endet meine Suche bei diesem Aufruf
Code:
public E get(int index) {
	    return (E)a[index];
	}

wobei a vom Typ Object ist.

Interessant wäre jetzt natürlich wie diese Index-Suche(a[index]) funktioniert bzw. implementiert ist. Wenn hier ebenfalls die Speicheradressen mit einer for schleife hinaufgezählt werden wäre das auch ein linearer Aufwand, falls die Speicheradresse 1x addiert nur konstant.

Meine Frage ist, wo finde ich die Implementation von Object[index] ?? Soweit ich bis jetzt herausgefunden habe ist das ein native Aufruf der eine Impementation in C der JVM aufruft.

Danke im vorraus für Hilfe!
 

happy_robot

Bekanntes Mitglied
interessante frage, aber ich glaube daß du dir die antwort vielleicht auch selber geben kannst.
fürden nativen teil (in was auch immer der implementiert worden ist) ist es doch ganz klar das der index die summe index x objektgrösse als adresse ist. die alternative wäre eine referenzierung die wohl aufgrund des ziels den java-interpreter performanter zu machen sicherlich als erstes ausgemerzt worden wäre.

warum willst du das wissen?? :D
 
G

Guest

Gast
happy_robot hat gesagt.:
interessante frage, aber ich glaube daß du dir die antwort vielleicht auch selber geben kannst.
fürden nativen teil (in was auch immer der implementiert worden ist) ist es doch ganz klar das der index die summe index x objektgrösse als adresse ist.

Naja ich vermute es auch dass es so ist aber würde es gern mit eigenen Augen sehn. :wink:

happy_robot hat gesagt.:
die alternative wäre eine referenzierung die wohl aufgrund des ziels den java-interpreter performanter zu machen sicherlich als erstes ausgemerzt worden wäre.

Versteh nicht wirklich wie du das meinst mit referenzieren, wäre nett wenn dus mir kurz erklären kannst.

happy_robot hat gesagt.:
warum willst du das wissen??

Hab auf der Uni eine Übungsaufgabe abgegeben und dabei eine Liste mit b00lean (sorry wegen der 00 aber bolean richtig geschrieben mag das forum nicht) flags als Linked List implementiert, anstatt als Vector oder Array und der Tutor hat mir einen Punkt abgezogen (um den es mir nicht wirklich geht :wink:).
Er meinte dass eben der Aufwand der Methode get(index) bei der LinkedList linear ist und bei einem Array konstant.
Mich interessiert ob es laufzeitmäßig wirklich einen Unterschied macht oder ob im Endeffekt es egal wäre weil beide entweder linear oder konstant sind.
 

happy_robot

Bekanntes Mitglied
Anonymous hat gesagt.:
happy_robot hat gesagt.:
die alternative wäre eine referenzierung die wohl aufgrund des ziels den java-interpreter performanter zu machen sicherlich als erstes ausgemerzt worden wäre.

Versteh nicht wirklich wie du das meinst mit referenzieren, wäre nett wenn dus mir kurz erklären kannst.
sorry, aber wenn du nicht weißt was es ist kannst du es auch nicht erkennen. es hilft dir also nicht.

Anonymous hat gesagt.:
Hab auf der Uni eine Übungsaufgabe abgegeben und dabei eine Liste mit b00lean (sorry wegen der 00 aber bolean richtig geschrieben mag das forum nicht) flags als Linked List implementiert, anstatt als Vector oder Array und der Tutor hat mir einen Punkt abgezogen (um den es mir nicht wirklich geht :wink:).
Er meinte dass eben der Aufwand der Methode get(index) bei der LinkedList linear ist und bei einem Array konstant.
Mich interessiert ob es laufzeitmäßig wirklich einen Unterschied macht oder ob im Endeffekt es egal wäre weil beide entweder linear oder konstant sind.
da hätte ich dir mehr als einen punkt abgezogen wenn ich tutor wäre :)

Nur weil in der aufgabenstellung etwas von "Liste" steht ist nicht die erste Klasse die diese Buchstabenfolge im Klassennamen enthält auch gleich die beste Wahl. :)

Für die fehlende Transferleistung hat er dir einen punkt abgezogen. ist imho vollkommen ok.
und eine "Linked List" ist eine referenzierte folge von elementen, da in jedem element die referenz auf das folgeelement enthalten ist. man muss sich von dem element also erstmal die referenz des folgeelements holen um dann auch daran zu kommen. der vorteil einer LinkedList liegt nur in der performanteren weise des aufbaus, da sich die ordnung nicht durch die folge im speicher sondern durch die referenzen ergibt. wenn man in einem array 1 elemement in der mitte einfügen will müssen alle folgeelement nach hinten verschoben werden. bei einer linked-list werden nur die referenzen umgebogen.
 
G

Guest

Gast
happy_robot hat gesagt.:
sorry, aber wenn du nicht weißt was es ist kannst du es auch nicht erkennen. es hilft dir also nicht.

ich denke ich weis schon was eine referenzierung ist (verweis auf eine adresse), aber ich weis nicht wie du das im zusammenhang mit der implementierung meinst. Denn woher soll man ausser durch addition des vielfachen der objektgröße die Adresse kennen um direkt auf ein Element referenzieren zu können ? Das meinte ich mit erklären :wink:

happy_robot hat gesagt.:
da hätte ich dir mehr als einen punkt abgezogen wenn ich tutor wäre :)

Nur weil in der aufgabenstellung etwas von "Liste" steht ist nicht die erste Klasse die diese Buchstabenfolge im Klassennamen enthält auch gleich die beste Wahl. :)

Naja die Aufgabenstellung war ja nicht eine Liste zu implementieren sondern eine Breitensuche in einem Graphen die die Entfernung aller Knoten von einem Ausgangsknoten berechnet und bei dem jeweiligen Knoten vermerkt.

Die Verkettete-Liste hatte ich "nur" als Implementation der Liste gewählt die die bolean flags hält die anzeigen ob ein Knoten schon besucht wurde oder nicht. Ich hab darüber nicht bewusst nach gedacht ob das jetzt einen Unterschied macht wenn ich nur lesend darauf zugreife.

happy_robot hat gesagt.:
Für die fehlende Transferleistung hat er dir einen punkt abgezogen. ist imho vollkommen ok.
und eine "Linked List" ist eine referenzierte folge von elementen, da in jedem element die referenz auf das folgeelement enthalten ist. man muss sich von dem element also erstmal die referenz des folgeelements holen um dann auch daran zu kommen. der vorteil einer LinkedList liegt nur in der performanteren weise des aufbaus, da sich die ordnung nicht durch die folge im speicher sondern durch die referenzen ergibt. wenn man in einem array 1 elemement in der mitte einfügen will müssen alle folgeelement nach hinten verschoben werden. bei einer linked-list werden nur die referenzen umgebogen.

Ja war mir klar :wink:. Aber wie gesagt hab nicht bewusst darüber nachgedacht dass die Implementation einen Unterschied macht wenn ich lesend darauf zugreife, da ich eigentlich dachte dass Arrays auch "in Java" implementiert werden und somit auch mit Referenzen (wie LinkedLists) arbeiten. Aber man lernt ja nie aus ...
 
G

Guest

Gast
Ok, nachdem ich jetzt nicht einschlafen kann weil es mich nicht loslässt zurück zum eigentlichen Thema: macht es einen Laufzeit Unterschied ob ich Arrays.get(n) mache oder LinkedList.get(n).


Ich hab mir das jetzt so überlegt:

Wenn ich bei der LinkedList (wie sie in Java 5 implementiert ist) die for schleife habe um an mein Element zu kommen habe ich eine lineare Laufzeit.

Wenn ich Arrays verwende muss ich doch auch irgendwo eine lineare Laufzeit haben, denn irgendwie muss ich doch an die Adresse kommen wo mein Element gespeichert ist oder ?

Also entweder wieder durch eine schleife die mir solange die Elementgröße zu meiner Array Basisadresse dazuzählt oder eine eine Multiplikation der Elementgröße, die ja wieder lineare Laufzeit hat vermute ich mal, mit dem Index den ich haben will und danach zu der Basisadresse des Arrays dazugezählt.

Denk ich da falsch oder habe ich sowohl bei der Implementation beim Zugriff aud die Liste als auch beim Zugriff auf das Array eine lineare Laufzeit ?
 
G

Guest

Gast
Ok jetzt seh ichs auch (danke für die google keywords, man muss einfach nur die richtigen keywords verwenden).
Danke für eure Bemühungen :D
 
M

maki

Gast
"linkedlist vs arraylist" als google suchwörter sind zwar gut, aber ich verwende grundsätzlich nur die englischsprachige Variante von Google (google.us oder google.com.au, letzteres aus gewohnheit), da gibt imho bessere ergebnisse ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
E Kalaha Spiel Implementation Allgemeine Java-Themen 4
M Lernende Vektorquantisierung - Implementation und Speicherung Allgemeine Java-Themen 1
D javadoc interface + implementation + @overrides Allgemeine Java-Themen 16
B Input/Output Schneller Sort mit wenigen Zugriffen (oder was anderes?) Allgemeine Java-Themen 3
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
H Object cast exception Allgemeine Java-Themen 7
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben