Практически единственное и самое главное отличие класса ArrayList от класса Vector в том, он является несинхронизированным.
То же можно сказать и о HashTable -> HashMap(?).В основе идеи изменения классов таким образом, чтобы они были несинхронизированными, лежит проблема цены синхронизации.
Сейчас в JVM время, требуемое для захвата блокировок при синхронизации пренебрежимо мало, но излишняя низкоуровневая синхронизация всё ещё замедляет работу приложений.
API коллекций передает коду приложения возможность синхронизировать доступ к коллекциям по мере
необходимости и предоставляет специальную функциональность «быстрого отказа», которая помогает обнаруживать одновременные обращения и вы�давать исключения.
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.htmlNote that the fail-fast behavior of an iterator cannot be guaranteed as it is, generally speaking, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification. Fail-fast iterators throw ConcurrentModificationException on a best-effort basis. Therefore, it would be wrong to write a program that depended on this exception for its correctness: the fail-fast behavior of iterators should be used only to detect bugs.
https://www.geeksforgeeks.org/fail-fast-fail-safe-iterators-java/Fail-fast iterators :
These iterators throw ConcurrentModificationException if a collection is modified while iterating over it.
They use original collection to traverse over the elements of the collection.
These iterators don’t require extra memory.
Ex : Iterators returned by ArrayList, Vector, HashMap.
Вот зачем нам нужен Class CopyOnWriteArrayList<E> — его итератор создает снэпшот с коллекции и работает с ней.
Пост слишком длинный. Нажмите вот сюда чтобы просмотреть полностью.