Объясните различие между Vector.add()
метод и Vector.addElement()
метод, наряду с отрывком примера кода
add ()
происходит из интерфейса List
, который является частью Java Collections Framework, добавленного в Java 1.2. Вектор
предшествует этому и был модернизирован. Конкретные различия заключаются в следующем:
addElement ()
синхронизирован
. add ()
нет. В Java Collections Framework, если вы хотите, чтобы эти методы синхронизировались, оберните коллекцию в Collections.synchronizedList ()
; и
add ()
возвращает логическое значение для успеха. addElement ()
имеет тип возврата void
.
Различие synchronized
технически не является частью API. Это деталь реализации.
Поддерживают использование методов List
. Как я уже сказал, если вам нужен синхронизированный
список
, выполните:
List<String> list = Collections.synchronizedList(new ArrayList<String>());
list.add("hello");
Сигнатура метода отличается, add возвращает true, а addElement - void.
из http://www.docjar.com/html/api/java/util/Vector.java.html
153 public synchronized boolean add(E object) {
154 if (elementCount == elementData.length) {
155 growByOne();
156 }
157 elementData[elementCount++] = object;
158 modCount++;
159 return true;
160 }
и
223 public synchronized void addElement(E object) {
224 if (elementCount == elementData.length) {
225 growByOne();
226 }
227 elementData[elementCount++] = object;
228 modCount++;
229 }
addElement
Этот метод идентичен по функциональности методу add (Object) (который является частью интерфейса List).
Таким образом, нет никакой разницы между:
Vector v = new Vector();
v.addElement( new Object() );
и
Vector v = new Vector();
v.add( new Object() );
Этот класс (вектор) существует с Java1.0 и теперь в значительной степени заменен на ArrayList
, который имеет преимущество в том, что он немного быстрее.
В javadoc упоминается, что:
public void addElement (E obj)
Этот метод идентичен по функциональности методу add (E) (который является частью интерфейса List).
Причина, по которой они оба существуют (из одного javadoc):
Начиная с платформы Java 2 v1.2, этот класс был модифицирован для реализации интерфейса List, что сделало его членом Java Collections Framework.
Список
имеет метод add
, поэтому реализация была добавлена в Vector
, но для обеспечения обратной совместимости addElement
не был удален