Różnica między ArrayList a Vector

ArrayList vs Vector

Wektor implementuje tablice, które mogą się zwiększać / zmniejszać w czasie wykonywania, gdy niektóre elementy zostaną dodane lub usunięte z niego. Dostęp do jego elementów można uzyskać za pomocą indeksu liczb całkowitych. Dwa pola - pojemność i przyrost pojemności, charakteryzują zarządzanie pamięcią wektorową. Implementuje cztery interfejsy:
* Lista
* Losowy dostęp
* Klonowalne
* Interfejsy z możliwością szeregowania

ArrayList, podobnie jak wektory, implementuje również cztery interfejsy. Ponownie, podobnie jak wektory, jego rozmiar może się zmieniać w czasie działania. Ma także pole o nazwie pojemność, którego rozmiar jest tak duży, jak rozmiar ArrayList.

Zarówno wektory, jak i ArrayList nadają się do pobierania elementów z dowolnej pozycji, a także do wstawiania lub usuwania elementów z końca klasy kontenera.
Z perspektywy API, zarówno wektory, jak i ArrayList są bardzo podobne. Więc gdzie dokładnie leży różnica między nimi? Poniższe punkty rzucą nieco światła na tę kwestię:

1. Synchronizacja: Wektory są synchronizowane, ale ArrayList nie. Jeśli dodasz lub usuniesz elementy z ArrayList, będzie to nazywane modyfikacją strukturalną. Gdy wiele wątków uzyskuje dostęp do tablicy ArrayList jednocześnie z blokiem kodu modyfikującym listę, należy zsynchronizować listę zewnętrznie. Krótko mówiąc, zawartość wektorowa jest bezpieczna dla wątków, podczas gdy ArrayList nie. Jeśli wymaganie nie wspomina o kolekcji bezpiecznej dla wątków, należy wybrać ArrayList, ponieważ synchronizacja wpływa na wydajność. Niezsynchronizowane listy 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 ArrayList lub wektora, istnieje szansa, że ​​w każdej klasie zabraknie miejsca. W takim przypadku domyślnie wektor podwaja swój rozmiar, podczas gdy rozmiar tablicy ArrayList wzrasta o 50%. Można ustawić wartość przyrostu w przypadku wektorów, które nie są możliwe dla ArrayList.

3. Przechodzenie przez elementy: ArrayList ma tę zaletę, że można uzyskać dostęp do jego elementów za pomocą indeksu. W przypadku wektorów musisz utworzyć iterator, aby przejść przez jego elementy.

Streszczenie:

1.Jeśli klasa kontenera ma być modyfikowana przez jeden wątek lub zmienną lokalną, należy użyć ArrayList.
2. Gdy dostęp do klasy kontenera uzyskuje wiele wątków, użyj wektorów, w przeciwnym razie będziesz musiał wykonać ręczną synchronizację.
3.Możemy określić rozmiar przyrostu za pomocą wektora, a za pomocą ArrayList nie możemy.
4. Wektor jest zsynchronizowany, a ArrayList nie.
5. Wektor może zwiększyć rozmiar dwukrotnie; ArrayList może zwiększyć go o 50%.