Vector的废弃

为什么Java的Vector类被认为是过时的或者废弃的

问题
为什么java Vector类被认为是一个遗留的,过时的或废弃的类?在并发操作时,使用它是无效的吗?如果我不想手动对对象实现同步,只想用一个线程安全的集合而无需创建底层数组的全新副本(如CopyOnWriteArrayList一样)。这种情况下,我使用Vector合理吗?然后就是关于栈的问题,它是Vector的一个子类,我应该用什么代替它?

回答
Vector中对每一个独立操作都实现了同步,这通常不是我们想要的做法。对单一操作实现同步通常不是线程安全的(举个例子,比如你想遍历一个Vector实例。你仍然需要申明一个锁来防止其他线程在同一时刻修改这个Vector实例。如果不添加锁的话通常会在遍历实例的这个线程中导致一个ConcurrentModificationException)同时这个操作也是十分慢的(在创建了一个锁就已经足够的前提下,为什么还需要重复的创建锁)当然,即使你不需要同步,Vector也是有锁的资源开销的。总的来说,在大多数情况下,这种同步方法是存在很大缺陷的。正如Mr Brain Henk指出,你可以通过调Collections.synchronizedList
来装饰一个集合 -事实上 Vector将“可变数组”的集合实现与“同步每一个方法”结合起来的做法是另一个糟糕的设计;各个装饰方法能够更明确的指示其关注的功能实现。对于Stack这个类-我更乐于使用Deque/ArrayDeque来实现

原文链接
stackoverflow

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,265评论 0 62
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,754评论 18 399
  • 对于如今的人来说,这般的大山早已无法看见了。 我的家乡就屹立在这巍峨的大山之间,前是山,后也是山。一眼望不到头...
    一只小小航阅读 890评论 0 3
  • 高考作为全国选拔人才的途径,具有极高的权威性、公平性。但世上没有绝对的公平,质疑高考的声音也不断。实际上,人才培养...
    飞春读传阅读 885评论 7 9
  • 春三月,李子村的迎春花开始吐黄,河里的野鸭嘎嘎地叫着。 大鹅紧锁着眉头,呆着眼看着那星星点点的金黄。想到昨天见过...
    兮兮的夏天阅读 384评论 0 0

友情链接更多精彩内容