Vector

Vector是线程安全的ArrayList,但效率较低,因为它在大多数方法上使用了`synchronized`。扩容默认为原来的2倍。CopyOnWriteArrayList是线程安全的选择,适用于读多写少的场景,但在修改操作时性能开销大,因为它会复制整个数组。
摘要由CSDN通过智能技术生成

什么是Vector
类似于ArrayList,Vector也是由数组组成,默认的初始化大小是【10】
在这里插入图片描述
但是Vector是线程安全的,在大多数的方法上面都存在synchronized关键字
在这里插入图片描述

如果需要进行扩容,每次扩容大小默认为【2】,注意(capacityIncrement > 0)是双括号条件
在这里插入图片描述

Vector和ArrayList的区别
1.vector默认构造还是饿汉式,而arrayList在1.8后改为了懒汉式
2.Vector 是多线程安全的,线程安全就是说多线程访问同一代码,不会产生不确定的结果,而 ArrayList 不是,这个可以从源码中看出,Vector 类中的方法很多有 synchronized 进行修饰,这样就导致了 Vector 在效率上无法与 ArrayList 相比【第二张图能体现】
3.vector可以设置增长因子【默认0】
● 以2倍的方式扩容,导致下一次申请的内存必然大于之前分配内存的总和,导致之前分配的内存不能再被使用,所以最好倍增长因子设置为(1,2)之间
在这里插入图片描述

4.因为考虑到线程安全的问题,效率比较低
可以用什么代替Vector
CopyOnWriteArrayList 相当于线程安全的ArrayList,它是个可变数组
● 它是线程安全的
○ 是通过volatile和监视器锁Synchrnoized来实现的
在这里插入图片描述

● 它的List通常保持很小,只读操作大于可变操作,需要在遍历的时候防止线程间冲突
● 因为需要复制整个基础数组,所以add,set,remove等可变操作开销大
○ 在“添加/修改/删除”数据时,都会新建一个数组,并将更新后的数据拷贝到新建的数组中,最后再将该数组赋值给“volatile数组”。这就是它叫做CopyOnWriteArrayList的原因!
● 支持hasNext和next,但是不支持可变remove操作
在这里插入图片描述

● 使用迭代器进行遍历的速度很快,并且不会与其它线程发生冲突,但是在构造迭代器的时候,迭代器依赖于不变的数组快照
○ COWIterator不支持修改元素的操作。例如,对于remove(),set(),add()等操作,COWIterator都会抛出异常!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值