2009-05-05 14 views
5

Przeglądałem dokumentację Java i natknąłem się na metodę clear() w ArrayLists.Przydatność ArrayList <E> .clear()?

Co to oznacza, w przeciwieństwie do ponownego przypisania nowego obiektu ArrayList do zmiennej?

+0

Należy zauważyć, że metoda clear() jest zdefiniowana przez Collection. Jest również obecny w interfejsie Map. –

Odpowiedz

14

Ponieważ może istnieć wiele odniesień do jednej listy, może być lepiej i/lub bardziej praktyczne, aby je wyczyścić niż ponowne przypisanie wszystkich odniesień.

Jeśli opróżnisz swoją tablicę dużo (w, powiedzmy, dużej pętli), nie ma sensu tworzyć wielu tymczasowych obiektów. Jasne, śmieciarz w końcu ich oczyści, ale nie ma sensu marnować zasobów, jeśli nie musisz.

A ponieważ wyczyszczenie listy jest mniej pracy niż tworzenie nowego.

+3

W rzeczywistości są przypadki, w których ponowne użycie kolekcji może spowodować problemy z pamięcią. Krótko mówiąc, jeśli duża tablica ArrayList (lub podobna) jest przechowywana przez długi czas, zostaje awansowana do pokolenia na stałe. Wtedy wszelkie zawarte w nim elementy, które mogą być śmieciami w młodym pokoleniu, nie mogą być gromadzone bez pełnego pokolenia (które analizuje pokolenie na stałe i widzi, że elementy są naprawdę śmieciami). – erickson

1

clear() nie przenosi nowego obiektu, więc jest mniej skuteczny.

2

Wyobraź sobie sytuację, w której w całym kodzie znajduje się wiele odniesień tego samego numeru java.util.ArrayList. Utworzenie nowej instancji listy i przypisanie do wszystkich zmiennych byłoby prawie niemożliwe lub bardzo trudne. Ale java.util.ArrayList.clear() załatwia sprawę!

3

Można mieć końcową boiska (zmienna klasa) List:

private final List<Thing> things = ... 

gdzieś w klasie chcesz wyczyścić (usunąć wszystkie) rzeczy. Ponieważ things jest ostateczny, nie można go ponownie przypisać. Ponadto prawdopodobnie nie chcesz ponownie przypisywać nowej instancji List, ponieważ masz już doskonałą listę instancji.

2

Płacisz mniej jasno niż za tworzenie nowego obiektu, jeśli cel był naprawdę jasny.

Ponowne przypisanie odniesienia nie powoduje wyczyszczenia obiektu. Założeniem jest, że jeśli nie ma innych odniesień do niego, zostanie on wkrótce odzyskany przez GC. W przeciwnym razie po prostu masz bałagan.

2

Oprócz wymienionych przyczyn, wyczyszczenie listy jest często bardziej semantycznie poprawne niż utworzenie nowej. Jeśli pożądanym wynikiem jest wyczyszczona lista, należy podjąć działania, aby wyczyścić listę, a nie utworzyć nową listę.

Powiązane problemy