Java和x27之间的差异;s Vector.add()和Vector.addElement()?

Java和x27之间的差异;s Vector.add()和Vector.addElement()?,java,collections,Java,Collections,请解释Vector.add()方法和Vector.addElement()方法之间的区别,以及来自列表接口的示例代码片段add(),该接口是Java 1.2中添加的Java集合框架的一部分矢量早于此,并用它进行了改装。具体区别是: addElement()已同步添加()不是。在Java Collections框架中,如果希望同步这些方法,请将集合包装在Collections.synchronizedList();及 add()为成功返回布尔值addElement()具有void返回类型 从技术上

请解释
Vector.add()
方法和
Vector.addElement()
方法之间的区别,以及来自
列表
接口的示例代码片段

add()
,该接口是Java 1.2中添加的Java集合框架的一部分<代码>矢量早于此,并用它进行了改装。具体区别是:

  • addElement()
    已同步<代码>添加()不是。在Java Collections框架中,如果希望同步这些方法,请将集合包装在
    Collections.synchronizedList()
    ;及

  • add()
    为成功返回布尔值
    addElement()
    具有
    void
    返回类型

  • 从技术上讲,
    synchronized
    差异不是API的一部分。这是一个实现细节

    支持使用
    列表
    方法。就像我说的,如果你想要一个
    同步的
    列表

    List<String> list = Collections.synchronizedList(new ArrayList<String>());
    list.add("hello");
    
    List List=Collections.synchronizedList(新的ArrayList());
    添加(“你好”);
    
    文件中提到:

    公共无效补遗(E obj)

    此方法在功能上与add(E)方法(列表界面的一部分)相同

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

    从Java2平台v1.2开始,这个类被改装以实现List接口,使其成为Java集合框架的成员


    List
    有一个
    add
    方法,因此在
    Vector
    中添加了一个实现,但为了保持向后兼容性,
    addElement
    没有被删除

    方法签名不同,add返回true,而addElement无效


    添加元素

    此方法在功能上与添加(对象)方法(列表界面的一部分)相同

    因此,两者之间没有区别:

    Vector v = new Vector();
    v.addElement( new Object() );
    

    这个类(vector)从Java1.0开始就存在,现在几乎被
    ArrayList
    所取代,后者的优点是速度稍快。

    主要区别->add()将始终返回true,而addElement()没有返回值

    部门内: addElement(object)方法在功能上与add(object)方法(列表界面的一部分)相同

    add(Object)是由于Vector实现了列表接口,它是在Java1.2将Vector移动到集合时出现的:早期版本中的集合类Vector和Hashtable已经过改造,以实现集合接口

    加法是“原始”向量的方法

    我在这里找到了答案。。

    我觉得奇怪的是,我们有这么多关于向量的问题,然后我意识到它们都来自同一个谷歌用户(逐字搜索):这个方法在功能上与add(Object)方法(它是列表界面的一部分)相同。add(Object)是由于vector实现了列表接口,它是在Java1.2将vector移动到集合时出现的:早期版本中的集合类vector和Hashtable已经过改造,以实现集合接口。addElement是“原始”向量的方法。@David,这是LMGTFY的一个非常好的版本——下面有一些非常棒的答案,您的评论不是很必要。也许值得一读。在我看来,一些反LMGTFY的政策只会鼓励懒惰。下一次,我只会解释一下我花了0.2秒到谷歌搜索并获得疯狂投票的答案。@David你说这是一件坏事——如果你不知道答案,你认为你可以通过谷歌找到答案,那正是你应该做的。你得到了rep,OPs问题在技术上得到了解决,但不是真正的原因,因为添加的返回值被硬编码为true,并且没有告诉你任何有用的信息。实际上,
    add
    返回
    true
    (阅读代码,它永远不会返回
    false
    )谢谢,是的,只返回true。但它确实返回一个值,而另一个值无效。向量和加法都不是最终的。因此,向量可以扩展,加法可以重写。至少在理论上,扩展可以有完全不同的行为(包括有用的返回值)。如果他们想强制addElement等同于add,他们应该这样写:public final synchronized addElement(E object){add(object);return true;}-1,用于spoonfeeding,并回答API中的方法描述。@camickr…你是认真的吗?你会否决我的完整答案,因为你对“RTFM”帖子上的争论感到不安?-1,你没有填鸭式地给出完整的答案。两种方法的使用都没有给出示例代码。@camickr如果你要投诉,请将其保留在你/我的答案中,并让这里至少有一个好的答案排在最前面,这样搜索此问题的人就可以轻松找到答案,而不是费力地去搜索nonsense@camickr所以基本上你是在报复一个(应得的)投了反对票,使糟糕的回答与更糟糕的行为交织在一起。我郑重地建议你以一种成熟的方式与人交流(为了你自己)。别担心,我没有否决你的答案,我只是在讽刺,因为你的答案没有回答问题。答案是“没有区别,代码是一样的”。如果您花时间阅读API,则返回布尔值这一事实是显而易见的。如果问题是“为什么有两个方法做相同的事情”,或者“为什么一个方法返回布尔值”,那么我会理解OP花了时间阅读API,并且仍然感到困惑。从长远来看,我不相信引用API中的信息对海报有帮助。教授海报阅读技巧@氯
    223       public synchronized void addElement(E object) {
      224           if (elementCount == elementData.length) {
      225               growByOne();
      226           }
      227           elementData[elementCount++] = object;
      228           modCount++;
      229       }
    
    Vector v = new Vector();
    v.addElement( new Object() );
    
    Vector v = new Vector();
    v.add( new Object() );