Jakie są główne różnice między Vectorem, a ArrayList?
Jakie są główne różnice między Vectorem, a ArrayList?
Vector to stary typ kolekcji, która zachowuje się tak, jak lista.
Zasadniczą różnicą pomiędzy java.util.Vector a java.util.ArrayList jest to, że metody w ArrayList nie są synchronizowane, a w Vector - tak.
Oznacza to, że w aplikacjach wielowątkowych można bezpiecznie używać kolejcji Vector. Natomiast tam, gdzie nie wykorzystujemy wielowątkowości ArrayList będzie bardziej efektywna, bo nie ma narzutu związanego z synchronizacją.
Jeśli jednak nasza aplikacja korzysta z wielowątkowości i zależy nam na użyciu ArrayList, to należy ją "zabezpieczyć" w następujący sposób:
List<String> lista = Collections.synchronizedList(new ArrayList<>());
Uwaga: Iteracja po takiej kolekcji nadal nie jest bezpieczna wielowątkowo!
Jeszcze lepszym pomysłem na użycie kolekcji w środowisku wielowątkowym jest wykorzystanie którejś z kolekcji z pakietu java.util.concurrent
(od Java SE5)