2013-08-25 23 views
6

Hallo an alle. Ich mache eine Vokabel-App, in der ich eine List<String> (oder ArrayList) erstellen muss. Um dies zu tun, ich habe die folgende Stück Code erstellt (nur ein Beispiel):ArrayList fügt automatisch null Elemente hinzu

List<String> tempSOLUTION = new ArrayList<String>(); 
String temp = "abc123"; 
tempSOLUTION.add(temp); 

Ich habe auch versucht, die folgenden:

tempSOLUTION.add(new String(temp)); 

Beide fügen Sie das Element der Liste , aber beim Debuggen, finde ich, dass es Feld 12 Objekte hat, die die folgenden:

[abc123, null, null, null, null, null, null, null, null, null, null, null] 

Mein Problem ist, dass ich nicht jene null Elemente haben kann, da diese neue Liste der Schlüssel auf einem HashableMap<String> ist, so dass jeder Änderung wird eine Ausnahme verursachen, da der Schlüssel NICHT existieren würde.

Screenshot der Liste (tempSOLUTION) Details mit dem Debugger: http://www.pabloarteaga.es/stackoverflow.jpg

Wie kann ich einen Artikel in der Liste hinzufügen, ohne alle diese null Elemente erstellen?

Nach gesucht, fand ich eine Antwort auf, wie man diese Null Elemente zu entfernen, die lautet:

tempSOLUTION.removeAll(Collections.singleton(null)); 

Aber es funktioniert nicht für meine Zwecke.

Vielen Dank im Voraus.

Antwort

15

Sie suchen wahrscheinlich das interne Array mit dem Debugger. Das ist egal; es ist nur ein Implementierungsdetail.

Was zählt ist, was über seine öffentliche API sichtbar ist. Mit anderen Worten, was Anrufe an size() (und so weiter) Ihnen sagen. (Und wenn das nicht 1 in Ihrem Codebeispiel zurückkehrt, dann etwas Seltsames vor sich geht!)

+0

Vielen Dank, löste meine Frage :) Wird es als Antwort akzeptieren, sobald das System es mir erlaubt. – vagaerg

6

Von Ihrem Screenshot ist es klar, dass das, was genau

[abc123, null, null, null, null, null, null, null, null, null, null, null] 

ist nicht der ArrayList selbst, sondern ihre Member-Variable objectData, die der interne Puffer der ArrayList ist (wo es tatsächlich Elemente speichert, die Sie hinzufügen).

Dieser Puffer hat eine größere Größe als die tatsächliche Größe der ArrayList, denn sonst, jedes Mal, wenn Sie ein neues Element hinzufügen, sollte die gesamte als ein größeres Array neu zugeordnet und alle Elemente kopiert werden, aber das ist sicherlich teuer.

Folgen Sie den Anweisungen von Oli, ignorieren Sie einfach die Implementierungsdetails und vertrauen Sie nur der Schnittstelle.

+0

Ok, vielen Dank. Wusste nicht, dass es so war. Also, wenn mein Array größer als 12 Elemente wäre, wäre dieser Puffer noch größer? Tut mir leid, dass ich nicht gewählt habe, aber ich habe nicht genug Rep. – vagaerg

Verwandte Themen