Frage Wie legt man ArrayList Größe als null fest?


String a []= {null,null,null,null,null};

//add array to arraylist
ArrayList<Object> choice = new ArrayList<Object>(Arrays.asList(a)); 

System.out.println(choice.size());

Warum die Größe der ArrayList choice ist 5, wenn alle Elemente auf gesetzt sind null


5
2018-04-01 01:52


Ursprung


Antworten:


Weil die Arraylist immer noch 5 Elemente enthält. Sie sind möglicherweise null, aber sie sind immer noch in der Liste vorhanden.

Sie können die ArrayList leeren, indem Sie aufrufen choice.clear();


2
2018-04-01 01:55



Ich denke, dass das verwirrend ist, dass Sie die ArrayList als eine ArrayList von Objekten, nicht als eine ArrayList von Verweisen auf Objekte denken.

Eine ArrayList of Object repräsentiert eine indexfähige Liste von Verweise zu Objekten.

Es ist zulässig, dass ein solcher Verweis nicht auf ein reales Objekt verweist, sondern "null" ist.

Daher haben Sie fünf Referenz- "Slots" mit jeweils einem Wert von Null.

Dies ist nicht dasselbe wie eine Folge von vier Nullen oder null Nullen.

Betrachten Sie Ihre ursprüngliche und primitive Anordnung von Strings - ihre Länge ist fünf, nicht null.

Oder noch einfacher, wenn Sie eine Klasse mit einem Feld vom Typ Object haben, nimmt sie immer noch Platz ein, unabhängig davon, ob sie sich tatsächlich auf etwas bezieht oder null ist. Andernfalls könnten Sie die Klasse nicht instanziieren und müssen sie nicht neu zuweisen, wenn Sie dem Feld tatsächlich etwas zugewiesen haben.


4
2018-04-01 01:54



Aus den Javadocs for ArrayList:

Resizable-Array-Implementierung der   Listenschnittstelle. Implementiert alle   optionale Listenvorgänge und Genehmigungen   alle Elemente, einschließlich null.

ArrayLists können null Elemente enthalten, also ist die Größe fünf. Denken Sie daran, dass wenn Sie einfach ein new ArrayList(5)Es wird eine anfängliche Kapazität von 5 haben, aber die size() wird 0 sein.


1
2018-04-01 01:57



Dies liegt daran, dass die ArrayList nicht null ist, fünf Objekte enthält (alle null sind), eine ArrayList wird niemals eine Nullgröße haben, mindestens die Größe 0 (null) und die ArrayList nicht initialisiert (ist null) und Sie versuchen, auf die Funktionsgröße () zuzugreifen, wird es eine NullPointerException werfen. Ich hoffe, dass diese Information für Sie nützlich sein wird, und Entschuldigung für mein schlechtes Englisch :(


1
2018-04-01 02:56