Ich habe eine stark besetzte Arraylist, die ich löschen und wiederverwenden möchte. Wenn ich es lösche, wird es den vorher verwendeten Speicher freigeben?
Ich sollte auch erwähnen, dass die Arraylist ein privates Read-Only-Feld einer Klasse ist, die immer noch viel aktive Arbeit zu tun hat, nachdem ich die Arraylist zum ersten Mal benutzt habe. Ich kann also nicht warten, bis die Garbage-Collection nach dem Kurs aus dem Rahmen gerät.
Ist die Clear-Methode schnell genug? Oder sollte ich eine neue Arraylist zerstören und erstellen?
Frage Update:
Wenn ich das Feld so deklariert habe (Danke an Jon's Rat)
%Vor%dann bevölkere ich es .... (schwer)
Wenn jetzt, anstatt es zu löschen und zu trimmen, kann ich einfach anrufen:
%Vor%Wäre das zu empfehlen?
Machen Sie das, was Ihre Absicht besser ausdrückt. Wollen Sie eigentlich eine neue Liste? Wenn ja, erstellen Sie eine neue. Wenn Sie konzeptionell dieselbe Liste wiederverwenden möchten, rufen Sie Clear
auf.
Die Dokumentation für ArrayList
besagt, dass Clear
behält die ursprüngliche Kapazität bei - so haben Sie immer noch ein großes Array, aber es wird voll von Nullen sein, anstatt auf die vorherigen Elemente zu verweisen:
Capacity
bleibt unverändert. Zurücksetzen die Kapazität vonArrayList
, callTrimToSize
oder setzeCapacity
Eigentum direkt. Ein leeres trimmenArrayList
setzt die Kapazität desArrayList
auf die Standardkapazität.
Irgendein Grund, warum Sie ArrayList
anstatt List<T>
übrigens benutzen?
Wenn der Speicher tatsächlich frei sein soll, setzen Sie ihn auf null und rufen Sie den Garbage Collector auf. Erstellen Sie dann eine neue ArrayList. Wenn Sie den Wert auf null setzen und dann einen neuen Wert erstellen, wird möglicherweise Garbage Collection ausgeführt, wenn zusätzlicher Speicher benötigt wird. Auch ich zweite generische Sammlungen. Es ist lange her, seit ich ArrayList benutzt habe.