dynamische speicherallokation in java?
-
Oermel schrieb:
heute hat mir mein lehrer erzählt, dass alle dynamisch erzeugten arrays in java als liste verwaltet werden....Ich rede von speicher am stück ^^ .fällt mir gerade noch ein, dass ich das auch erwänen sollte.
int[] ar = new int[size];
ist kein Speicher am stück???
Das kann doch keine Liste sein, dass wäre ja extrem lahm, wenn ich bei ar[87] 87 Elemente durchgehen müsste.
-
Ist auch keine Liste.
MfG SideWinder
-
@ SideWinder: mein lehrer meinte dass das alles als liste verwaltet würde!!
ich weiss das natürlich nicht aber der hat info studiert ... (muss natürlich nichts heissen) haste vllt irgendnen link oder so der eine der beiden aussagen belegt?@ echt: aber 87 elemente durchzugehen wird wohl nicht sehr lagne dauern, bei keiner programmiersprache ... das macht sich erst bei echtzeitanwendugen bemerkbar oder sehr aufwändigen anderen anwendungen wirklich bemerkbar.
-
Oermel schrieb:
@ SideWinder: mein lehrer meinte dass das alles als liste verwaltet würde!!
Dein Lehrer hat unrecht. Natürlich werden primitive Arrays nicht als Liste verwaltet. Das wär zum einen sehr langsam und zum andern auch noch Verschwendung von Speicherplatz (man braucht zusätzliche Zeiger).
Ich vermute dein Lehrer bringt das mit der Klasse Array durcheinander. Diese Klasse implementiert nämlich das Interface List (ebenso wie Vector, LinkedList, etc.). Dies bedeutet nicht das die Implementierung dann eine Liste sein muss, es bedeutet nur das es wie eine solche benutzt werden kann.
Oermel schrieb:
ich weiss das natürlich nicht aber der hat info studiert ... (muss natürlich nichts heissen) haste vllt irgendnen link oder so der eine der beiden aussagen belegt?
Nur weil jemand Informatik studiert hat, heißt das noch nicht das derjenige sich auch mit einen bestimmten Thema wirklich auskennt.
Oermel schrieb:
@ echt: aber 87 elemente durchzugehen wird wohl nicht sehr lagne dauern, bei keiner programmiersprache ... das macht sich erst bei echtzeitanwendugen bemerkbar oder sehr aufwändigen anderen anwendungen wirklich bemerkbar.
Doch - das kann sich durchaus bemerkbar machen. Zwar spielt sich das durchlaufen einer solchen Liste irgendwo im Nano oder Mikrosekunden-Bereich ab, aber das kann sich sehr schnell auf ein unerträgliches Maß hochschaukeln. Und wenn die GUI dadurch dann z.B. für mehr als 100ms hängt merkt man das sehrwohl.
MfG,
Hilefoks
-
http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.htmlWas die VM damit dann macht, ist eigentlich ihr Bier, sehe aber keinen Grund warum hier irgendeine VM-Implementation kein "stinknormales" Array allokieren sollte.
MfG SideWinder
-
Oermel schrieb:
@ echt: aber 87 elemente durchzugehen wird wohl nicht sehr lagne dauern, bei keiner programmiersprache ... das macht sich erst bei echtzeitanwendugen bemerkbar oder sehr aufwändigen anderen anwendungen wirklich bemerkbar.
Wenn ich ein Array mit for(i=0;...;i++) arr[i] durchlaufe, dann wäre die Laufzeit bei sowas nicht mehr liniear, sondern quadratisch und das wäre wirklich lahm
-
Ja, nur würde man dann wohl auf ein Array auch nicht so zugreifen. Das durchlaufen einer Liste ist auch linear möglich
MfG SideWinder
-
echt schrieb:
Oermel schrieb:
@ echt: aber 87 elemente durchzugehen wird wohl nicht sehr lagne dauern, bei keiner programmiersprache ... das macht sich erst bei echtzeitanwendugen bemerkbar oder sehr aufwändigen anderen anwendungen wirklich bemerkbar.
Wenn ich ein Array mit for(i=0;...;i++) arr[i] durchlaufe, dann wäre die Laufzeit bei sowas nicht mehr liniear, sondern quadratisch und das wäre wirklich lahm
Es geht darum auf ein bestimmtes Element zuzugreifen. Wenn man auf das Element x in einem Array zugreifen möchte ist die Laufzeit immer konstant - also O(1). Egal ob das Element an erster oder letzter Stelle im Array steht (oder mitten drin) und egal wie groß das Array ist.
Bei einer Liste ist dies aber nicht so. Dort ist der Aufwand O(n/2) - denn im Mittel muss immer die halbe Liste durchlaufen werden um das Element zu finden.MfG,
HilefoksP.S: Deine for-Schleife ist übrigens linear - nicht quadratisch. Der Zugriff auf ein Array-Element ist konstant. Würdest du das Array gegen eine Liste ersetzen wär es allerdings, zumindest ohne Optimierungen, quadratisch.
-
die behauptung war das array == liste
-
Hilefoks schrieb:
Ich vermute dein Lehrer bringt das mit der Klasse Array durcheinander. Diese Klasse implementiert nämlich das Interface List (ebenso wie Vector, LinkedList, etc.).
Falsch.