PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Collection framework: Anzahl Elemente


DocEW
2005-12-05, 17:37:03
Hallo,

sehe ich das richtig, daß ich in Java keine ArrayList mit sagen wir mal (2^31 + 42) Elementen anlegen kann? :(

DocEW

Aqualon
2005-12-05, 18:51:35
http://forum.java.sun.com/thread.jspa?threadID=644243&messageID=3795839

2^31+42 ist größer als Integer.MAX_VALUE, daher kann das schon rein von der Verwaltung her nicht gehen.

Aqua

Trap
2005-12-05, 18:57:03
Da brauchst du mindestens 10 GB virtuellen Speicher für, ich glaub das ist nur selten ein Problem.

DocEW
2005-12-05, 20:24:20
Da brauchst du mindestens 10 GB virtuellen Speicher für, ich glaub das ist nur selten ein Problem.
Außer man hat einen 64bit-Rechner mit 30 GB physischem Speicher.
OK, danke für die schnellen Antworten!

Köppchen
2005-12-05, 20:42:56
Aufgrund des Virtuellen Speichers klappts in der Regel wohl meistens nicht.
Im Prinzip sollte es aber gehen, denn size() soll Integer.MAX_VALUE liefern wenn mehr als diese Anzahl Elemente drin sind (http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html#size()).
Wenn ich mir aber die Implementation von List im JDK 1.4 ansehe, so wirds nicht klappen :eek:

Trap
2005-12-05, 21:39:32
Bei ArrayList steht aber .size() "Returns the number of elements in this list."

Damit kann es nicht mehr als Integer.MAX_VALUE enthalten.

Köppchen
2005-12-06, 00:57:21
Deshalb hatte ich geschrieben das wird z.B. bei List nicht klappen. Dessen Implementierung liefert auch die Anzahl Elemente ohne den (theoretisch) möglichen Überlauf zu berücksichtigen. Bei ArrayList wird's das gleiche sein, denn darin wird schließlich das Int zum Adressieren der Elemente genutzt.

Oder einfach ausgedrückt: Das Collection Api sieht zwar mehr im prinzip mehr als Integer.MAX_VALUE Elemente vor, aber in der Praxis wird das normalerweise nicht funktionieren.
Übrigens sollte man sich schon Gedanken machen was passiert wenn man solche Strukturen nutzt. Wenn man z.B. ArrayList's mit vielen Elementen allokiert so muss der Speicher für das zugrundeliegende Array am Stück auf dem Heap vorhanden sein!

Gruß Markus