2013-07-03 19 views
6

Ich baue eine Chat-Anwendung. Current Ich habe alle Nachrichten in einer ArrayList, die mich denken - Wie viele Elemente sind die ArrayList Design zu halten? 100? 1.000? 10.000?Anzahl der Elemente in ArrayList

+0

Vorsicht vor Threading-Problemen. – SLaks

+0

Vielleicht hilft das: http://www.codeanch.com/t/524745/java/java/Maximum-capacity-arrayList-String-objects –

+0

@MarounMaroun nicht jeder hat genug rep zu closevote. – CPerkins

Antwort

11

ArrayList kann nicht mehr als Integer.MAX_VALUE Elemente enthalten.

Also 2147483647 ist die max.

3

Arraylist kann eine beliebige Anzahl von Elementen bis zu Integer.MAX_VALUE halten - dies zu einer Design-Entscheidung beruht int Datentyp für Indizes zu verwenden. Was jedoch wichtig ist, ist, wie Sie Speicher dafür reservieren - die Speicherzuweisung ist langsam - und wie Sie Elemente bearbeiten/darauf zugreifen. Allein durch den Speicheraspekt sind Sie jedoch auf MAX_VALUE beschränkt. In Java ist dies 2^31-1 = 2.147.483.647.

Für jede normale Anwendung sollte dies ausreichen. Wenn Sie jedoch mehr benötigen, können Sie den Quellcode dafür leicht abrufen und ihn so ändern, dass er long als Index-Datentyp verwendet - und dann durch Long.MAX_VALUE begrenzt wird.

+0

Der Grund liegt nicht an der Auswahl der int-Indizes per se. Der Grund dafür ist der Hintergrundspeicher der List-Implementierung, der aufgrund seiner gewünschten (amortisierten) algorithmischen Komplexität des wahlfreien Zugriffs auf die Liste ausgewählt wurde (was array-ähnliches Verhalten erfordert). Dieser Backing Store (ein Array) enthält diese Einschränkung in Java/JVM. Man könnte jedoch auch die List-Schnittstellen implementieren, um negative Indizes zu verwenden und dem Benutzer 2^32 mögliche Indizes zu geben, die den gleichen Datentyp für index ("int") verwenden, beispielsweise indem zwei Arrays und einige zusätzliche Objekte als Backing-Speicher verwendet werden von dem einen Array. – user268396

+0

@ user268396 Gut genug, aber Sie können immer noch die Quelle für die 'ArrayList' bekommen und sie modifizieren, um die maximale Größe zu erhöhen, was immer Sie wollen. Machen Sie die Unterstützung zum Beispiel 'Object [] []' und benutzen Sie 'long' als Index - jetzt werden Sie durch' Integer.MAX_VALUE^2' eingeschränkt. –

+0

Offensichtlich, aber mein allgemeinerer Punkt ist, dass in Ihrer Antwort (wie gesagt) die Argumentation die Verbindung zwischen der Begrenzung der Implementierung und dem Verhalten der Implementierung (Leistung/algorithmische Komplexität) verfehlt.Wenn man sie als bare Münze nimmt, wäre eine vernünftige Frage: Warum überhaupt ArrayList verwenden? Wofür ist es gut, wenn es nur eine eingeschränkte Version von LinkedList sein kann? Auf die Antwort ist "algorithmische Komplexität/Leistung", aber dann ist die Beschränkung nicht offensichtlich oder nicht erklärt. :) – user268396

6

ArrayList, die von einem Array unterstützt wird und auf die Größe des Arrays beschränkt ist - d. H. Integer.MAX_VALUE.

Eine LinkedList ist nicht auf die gleiche Weise begrenzt und kann eine beliebige Anzahl von Elementen enthalten.

siehe ähnliche Frage max. length of List in Java

How many data a list can hold at the maximum andere Aspekte auf maximale Größe der Liste haben

+2

siehe http://stackoverflow.com/questions/7632126/maximum-size-of-hashset-vector-linkedlist –

+0

Ja, ich sehe ...: P gelernt, danke ...: D –

10

Die Größe des ArrayListInteger.MAX_VALUE ist. Nicht, weil die Kommentare vor der List#size() Methode der List sagen, die maximale Größe von List ist Integer.MAX_VALUE wie unten.

/** 
    * Returns the number of elements in this list. If this list contains 
    * more than <tt>Integer.MAX_VALUE</tt> elements, returns 
    * <tt>Integer.MAX_VALUE</tt>. 
    * 
    * @return the number of elements in this list 
    */ 
int size(); 

Es ist, weil ArrayList Array verwendet intern und theoretisch Ein Array kann auf maximal Integer.MAX_VALUE groß sein. Für weitere Informationen sehen Sie this.

+0

Dies doesn beantworte die Frage überhaupt nicht. Die JavaDoc on size gibt nur die Begrenzung für das Reporting einer Listengröße an, sie sagt * nichts * über die maximale Größe einer Liste. – SimonC

+0

Die Antwort ist völlig irreführend, die 'size()' JavaDoc gibt keinen Hinweis auf die maximale Größe einer Listenimplementierung. – SimonC