ArrayList по сравнению с Векторами в Java, если потокобезопасность не является беспокойством

28
задан Sumit Singh 3 December 2012 в 10:29
поделиться

4 ответа

Вектор происходит назад со дней API перед наборами и был модифицирован с тех пор, чтобы быть частью ее. Из того, что я читал, причина, она не удерживается от использования, состоит в том, потому что базовый API зависит от нее.

ArrayList был записан с нуля, поскольку часть API Наборов и как таковой должна использоваться, если Вы не должны поддерживать версии Java вниз к 1,2.

при необходимости в ориентированном на многопотоковое исполнение ArrayList можно использовать статический метод фабрики Collections.synchronizedList(new ArrayList<type>); для генерации списка.

40
ответ дан Jeffrey 28 November 2019 в 02:42
поделиться

Если потокобезопасность не будет проблемой, [то 112] будет быстрее, поскольку она не должна синхронизироваться. Хотя, необходимо всегда объявлять переменную как List так, чтобы реализация могла быть изменена позже по мере необходимости.

я предпочитаю обрабатывать свою синхронизацию явно, потому что много операций требует множественных вызовов. Например:

if (!myList.isEmpty()) { 
    myList.get(0);
}

должен быть:

synchronized (myList) {
   if (!myList.isEmpty()) { 
       myList.get(0);
   }
}
15
ответ дан amalloy 28 November 2019 в 02:42
поделиться

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

Вот один Синхронизация & Производительность .

9
ответ дан Sumit Singh 28 November 2019 в 02:42
поделиться

Игнорируя синхронизацию, основное различие между Vector и ArrayList - то, что Vector массив изменяемого размера (подобный Вектору STL C++), и ArrayList Список, который, оказывается, поддерживается массивом.

различие проявляется в setSize () метод. Нет никакого эквивалентного метода в ArrayList. Некоторая экскавация ++ Java-разработчики становится одержимой этим. Существуют много легки способы работать вокруг этого так, это не должна быть проблема.

Просто не делают ошибку сообщения разработчику C++, который ArrayList является эквивалентом std::vector. Вы никогда не будете слышать конец о нем.

5
ответ дан James Schek 28 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: