Java的Vector.add()和Vector.addElement()之间的区别?

Jav*_*ser 16 java collections

请解释Vector.add()方法和Vector.addElement()方法之间的区别,以及示例代码段

cle*_*tus 28

add()来自List接口,它是Java 1.2中添加的Java Collections Framework的一部分.Vector比这更早,并用它进行改造.具体差异是:

  1. addElement()synchronized.add()不是.在Java Collections Framework中,如果要将这些方法同步包装在集合中Collections.synchronizedList(); 和

  2. add()返回成功的布尔值.addElement()有一个void返回类型.

synchronized技术上的差异不是API的一部分.这是一个实现细节.

赞成使用这些List方法.就像我说的,如果你想做一synchronized List件事:

List<String> list = Collections.synchronizedList(new ArrayList<String>());
list.add("hello");
Run Code Online (Sandbox Code Playgroud)

  • @camickr所以基本上你已经报复了一个(应得的)downvote并且用更糟糕的行为加重了一个糟糕的答案.我认真地建议你弄清楚如何以成熟的方式与人们进行互动(为了你自己). (4认同)
  • @cletus我认为你错了,因为这两个功能是同步的。`公共同步无效 addElement(E obj)` `公共同步布尔 add(E e)` (2认同)

Jub*_*bal 6

方法签名不同,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       }
Run Code Online (Sandbox Code Playgroud)

223       public synchronized void addElement(E object) {
  224           if (elementCount == elementData.length) {
  225               growByOne();
  226           }
  227           elementData[elementCount++] = object;
  228           modCount++;
  229       }
Run Code Online (Sandbox Code Playgroud)


Mic*_*zek 5

javadoc中提到:

public void addElement(E obj)

此方法的功能与add(E)方法(它是List接口的一部分)相同.

它们都存在的原因是(来自同一个javadoc):

从Java 2平台v1.2开始,这个类被改进以实现List接口,使其成为Java Collections Framework的成员.

List有一个add方法,所以添加了一个实现Vector,但为了保持向后兼容性,addElement没有删除

  • @camickr ......你认真吗?你会打破我的完整答案,因为你对你的"RTFM"帖子上的争论感到不满? (4认同)