Разница между Arraylist и Vector - столбец Java те вещи

Java программист Java EE Язык программирования

В предыдущих статьях мы сосредоточились на ArrayList, и пришло время выпустить эту картинку.

Содержимое этой картинки очень важно для нас при изучении Java. Белая часть — это то, что нам нужно понять, а желтая часть — это то, что нам нужно понять. Нам нужно не только знать, как ее использовать, но и необходимо прочитать исходный код хотя бы один раз. Зеленая часть используется редко, но ее можно задать в вопросах на собеседовании. Давайте рассмотрим часто задаваемый вопрос на собеседовании:В чем разница между Arraylist и Vector?

Сначала даем стандартный ответ:
1. Vector является потокобезопасным, ArrayList не является потокобезопасным.
2. Когда базового массива недостаточно, ArrayList расширяется в 0,5 раза от исходного, а Vector расширяется в 1 раз.

Посмотрите на картинку выше. Vector и ArrayList оба наследуются от List, давайте взглянем на исходный код Vector.

Реализован интерфейс List, а нижний слой такой же, как ArrayList, реализованный массивами. Давайте взглянем на методы добавления этих двух классов соответственно, сначала взглянем на исходный код добавления ArrayList.

Посмотрите на исходный код добавления Vector

Реализация метода такая же, то есть добавляется ключевое слово synchronized, а потом смотрим другие методы, сначала смотрим метод удаления ArrayList

Посмотрите еще раз на метод удаления Vector.

Реализация метода такая же, то есть еще одно ключевое слово synchronized, а дальше смотрим на метод get у ArrayList

получить метод вектора

Посмотрите на другие методы Vector

без исключений,Пока это критическая операция, ключевое слово synchronized добавляется перед методом для обеспечения безопасности потоков.. Перед выполнением синхронизированного модифицированного метода система добавит блокировку к методу и снимет блокировку после выполнения метода.Процесс блокирования и снятия блокировок требует дополнительных затрат в системе.В однопоточной среде Vector гораздо менее эффективен. (Многопоточная среда не позволяет использовать ArrayList и нуждается в обработке).

Что касается разницы в расширении базовых массивов, то я не возьму вас читать здесь исходный код.Если вам интересно, пожалуйста, читайте сами.Базовый код практически одинаков, а разница в том, что длина новый массив после расчета несовместим.

Подобно ArrayList и Vector, одними и теми же классами, подобными отношениям, являются HashMap и HashTable, StringBuilder и StringBuffer, причем последний является реализацией потокобезопасной версии первого.Я надеюсь, что в будущем, в процессе собеседования, каждый сможет назвать причину, вместо того, чтобы слепо идти в конец тестовых вопросов, только понимание, не нужно запоминать.

Примечание. Что касается безопасности потоков, в последующих статьях будет сказано, что здесь приведено лишь краткое описание различий между двумя классами.

Предыдущий:Временная сложность ArrayList — столбец Java The Things

Следующий:Линейный список структур данных Java — эти вещи в Java 


Примечание. Эта колонка была впервые опубликована в общедоступной учетной записи: sayayJava. Все примеры кодов были загружены на официальный аккаунт, обратите внимание на загрузку, если вам это нужно.

Если вам нравится эта серия статей,Пожалуйста, поставьте лайк или поделитесь для меня, ваша поддержка является движущей силой для меня, чтобы продолжать. Вы также можете оставить сообщение в области комментариев, чтобы узнать, что вы хотите знать. Если у вас есть возможность, эта колонка объяснит это. Наконец, не забудьте заплатить внимание ко мне.

Перепечатка приветствуется, но с указанием "автора" и "оригинального адреса". Пожалуйста, сохраните этот абзац в тексте для перепечатки, спасибо за уважение авторских прав. Для коммерческого воспроизведения или публикации, пожалуйста, свяжитесь с автором для получения разрешения.