Прежде всего, мы смотрим на обе категории, которые реализуют интерфейсы списка, и в интерфейсе списков есть три класса реализации, а именно ArrayList, Vector и LinkedList. Список используется для хранения нескольких элементов, может поддерживать порядок элементов и позволяет повторение элементов.
Соответствующие различия между тремя конкретными классами реализации следующие:
1. ArrayList является наиболее часто используемым классом реализации списка, внутренне реализованным через массивы, что позволяет быстрому случайному доступу к элементам. Недостаток массивов заключается в том, что между каждым элементом не может быть расположено. Когда размер массива не будет удовлетворен, емкость для хранения должна быть увеличена. Необходимо сказать, что данные уже скопируются в новое пространство для хранения. При вставке или удалении элементов из среднего положения ArrayList массив необходимо скопировать, перемещаться, а стоимость относительно высока. Следовательно, он подходит для случайных поисков и обходов, а не для вставки и удаления.
2. Вектор также реализуется с помощью массивов, разница заключается в том, что он поддерживает синхронизацию потоков, то есть в определенный момент, только один поток может написать вектор, чтобы избежать несоответствия, вызванного несколькими потоками, написанными одновременно, но для реализации синхронизации, так как он медленнее, чем доступ к ArrayList.
3. LinkedList использует связанную структуру списка для хранения данных, которая очень подходит для динамической вставки и удаления данных, а случайный доступ и скорость обхода относительно медленные. Кроме того, он также предоставляет методы, которые не определены в интерфейсе списка, которые специально используются для управления заголовком таблицы и хвостовых элементов и могут использоваться в качестве стеков, очередей и двунаправленных очередей.
Глядя на исходный код Java, я обнаружил, что когда размер массива недостаточно, мне нужно воссоздать массив, а затем скопировать элементы в новый массив. Размер расширенного массива ArrayList и Vector отличается.
ArrayList:
public boolean add (e e) {EncureCapacity (размер + 1); // Добавить элементы, чтобы определить, могут ли они разместить их. Если вы не можете, вы должны создать новый массив ElementData [size ++] = E; return true;} public void EnsureCapacity (int mincapacity) {modcount ++; int oldCapacity = elementData.length; if (mincapacity> oldcapacity) {Object oldData [] = elementData; // Эта строка не показала полезности, я не знаю, что разработчики думают о int newcapacity = (OldCapacity * 3)/2 + 1; // Добавить размер нового массива if (newcapacity <mincapacity) newcapacity = mincapacity; // mincapacity обычно близка к размеру, так что это победа: elementData = arrays.copyof (elementdata, newcapacity); }}В векторе:
Private void EnsureCapacityHelper (int mincapacity) {int oldCapacity = elementData.length; if (mincapacity> oldcapacity) {object [] olddata = elementdata; int newcapacity = (емкость,> 0)? (OldCapacity + емкость): (OldCapacity * 2); if (newcapacity <mincapacity) {newcapacity = mincapacity; } elementData = arrays.copyof (elementdata, newcapacity); }}Разница между ArrayList и Vector заключается в следующем:
ArrayList расширяется на 50% + 1 по умолчанию, когда недостаточно памяти, а вектор расширяется на 1 раз по умолчанию.
Vector обеспечивает интерфейс Indexof (obj, Start), но ArrayList не делает.
Векторы находятся на уровне безопасности резьбы, но в большинстве случаев векторы не используются, потому что безопасность потока требует больших накладных расходов на систему.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.