ArrayList i Vector

Anonim

ArrayList vs Vector

Wektor implementuje tablice, które mogą rosnąć / zmniejszać się w czasie wykonywania, gdy niektóre elementy są dodawane lub usuwane z niego. Jego elementy są dostępne za pomocą indeksu całkowitego. Dwa pola - przyrost pojemności i pojemności, charakteryzują zarządzanie pamięcią wektorową. Implementuje cztery interfejsy: * Lista * Losowy dostęp * Klonowalne * Serializable interfejsy

ArrayList, podobnie jak wektory, również implementuje cztery interfejsy. Ponownie, podobnie jak wektory, jego rozmiar może się zmieniać w czasie wykonywania. Ponadto ma pole o nazwie capacity, którego rozmiar jest tak duży, jak rozmiar ArrayList.

Zarówno wektory, jak i ArrayList są przydatne do pobierania elementów z dowolnej pozycji, a także do wstawiania lub usuwania elementów z końca klasy kontenera. Z punktu widzenia interfejsu API zarówno wektory, jak i ArrayList są bardzo podobne. Gdzie dokładnie leży różnica między tymi dwoma? Poniższe punkty rzucają nieco światła na tę kwestię:

1. Synchronizacja: Wektory są zsynchronizowane, ale ArrayList nie jest. Dodanie lub usunięcie elementów z tablicy ArrayList jest nazywane modyfikacją strukturalną. Gdy wiele wątków uzyskuje dostęp do tablicy ArrayList równolegle z blokiem kodu modyfikującym listę, wówczas należy zsynchronizować zewnętrznie listę. W skrócie, zawartość wektorowa jest bezpieczna dla wątków, podczas gdy ArrayList nie. Jeśli w wymaganiu nie wspomniano o zbieraniu wątków, należy wybrać ArrayList jako wydajność trafień synchronizacji. Niezsynchronizowane ArrayLists są szybkie.

2. Wzrost danych: zarówno ArrayList, jak i elementy wektorowe są przechowywane jako tablice, ale wektory mają domyślny rozmiar 10, a ArrayList nie ma domyślnego rozmiaru. Kiedy dodaje się element do tablicy ArrayList lub wektora, istnieje szansa, że ​​każda klasa może zabraknąć miejsca. W takim przypadku wektor podwaja swój rozmiar, a rozmiar ArrayList zwiększa się o 50%. Możesz ustawić wartość przyrostu w przypadku wektorów, które nie są możliwe dla ArrayList.

3. Przemierzanie elementów: ArrayList ma tutaj przewagę, ponieważ można uzyskać dostęp do jej elementów, po prostu używając indeksu. W przypadku wektorów musisz utworzyć iterator, aby przemierzać jego elementy.

Streszczenie:

1.Jeśli klasa kontenera ma zostać zmodyfikowana przez pojedynczy wątek lub pewną zmienną lokalną, powinieneś użyć ArrayList. 2. Gdy dostęp do klasy kontenera jest możliwy przez wiele wątków, użyj wektorów, w przeciwnym razie będziesz musiał wykonać synchronizację ręczną. 3. Możemy określić rozmiar przyrostu w wektorze, a przy pomocy ArrayList nie możemy tego zrobić. 4. Wektor jest zsynchronizowany, a ArrayList nie. 5. Wektor może zwiększyć rozmiar dwukrotnie; ArrayList może ją zwiększyć o 50%.