Datentypen Arrays in Java - Adress-Arithmetik im Vergleich zu Listen

knowledge

Bekanntes Mitglied
Hi,

normalerweise ist es doch so, dass ein Array im Speicher als lineare Folge von Speicherzellen vorliegt. Die Adressierung der Werte über den Index kann dann über Startadresse + (Elementgröße * Index) erfolgen. Bei int also z.B. Startadresse + (4 Byte * Index).

Das ist doch in Java genauso implementiert, oder? Konnte dazu keine Angaben finden ob Arrays auch als solche lineare Folge von Speicher betrachtet werden und die Addressierung so erfolgt. Welchen (Geschwindigkeits)Vorteil kann man darüber erreichen, z.B. im Vergleich zu Listen?
 
was ist denn für dich stattdessen eine Liste? ArrayList zählt wohl nicht, die benutzt auch ein Array,
bleibt unter den einfach bekannten die LinkedList, die man objektorientiert aus verknüpften Objekten zusammensetzt,

die Unterschiede dazu sollten bekannt sein oder stehen überall,
im sequentiellen Durchlauf ist die Verlinkung sogar schneller als die Array-Indexe

aber Geschwindigkeit und Implementierungsdetails sollten dich in Java eigentlich weniger interessieren
(Umschreibung von 'ich weiß es nicht')
 
Wie die jeweilige JVM ihren Speicher verwaltet, ist ihre Sache, in den Spezifikationen wurden da keine Vorgaben gemacht - wozu auch, für den Java-Programmierer ist die Speicherverwendung und -verwaltung sowieso "unsichtbar". In der Regel wird man intern die bereits vom Betriebssystem bereitgestellten C-artigen Arrays verwenden (natürlich mit zusätzlicher Bereichsprüfung u.s.w.), insbesondere um schnelle native Routinen für Sachen wie arrayCopy verwenden zu können.
 
Hallo,

danke für die Antworten.

>was ist denn für dich stattdessen eine Liste?

Keine hintereinanderliegenden Speicherzellen die wie oben angedeutet über einen Offset, der durch den Index und den Inhalt berechnet wird, adressiert werden sondern eine lineare Anordnung die über Zeiger bzw. Referenzen erzeugt wird. Eine Position des nächsten Elementes erfolgt hier also nicht über Offset sondern Angabe der direkten Adresse bzw. Referenz. So würd ich das verstehen 🙂
 
Eine Liste in Java ist das, was das Interface List implementiert - ob da intern Arrays oder Zeiger oder Keilschrifttafeln werkeln ist völlig egal...
 

Zurück
Oben