Array、ArrayList、Vector、LinkedList

Array 、 ArrayList 、Vector 、 LinkedList 全部为  线性数据结构


Array :  固定大小的数组,需要内存的连续空间 ,不能扩容,无线程安全问题 。


ArrayList :   不固定大小的数据,初始化默认size=0,第一次插入的时候会增大defaultSize=10,后续每次加多少就扩充多大。 当然,删除的时候 ,size也会相应减小。

非线程安全 但是自身会有安全检测,  需要内存的连续空间  ,适合遍历查询,不适合插入和删除操作

当有多个线程进行更新操作的时候,会 抛出ConcurrentModificationException

JDK代码中,所有的add(), next(), previous(), remove(), set()方法都会先执行 checkForComodification()

final void checkForComodification() {
        if (modCount != expectedModCount)
        throw new ConcurrentModificationException();
    }
然后再执行操作之前,modCount++ ,  执行完了之后 expectedModCount=modCount 。

但是,如果2个线程恰好都同时绕过了checkForComodification() ,那么假定同时在执行add方法的时候,

2者同时扩容,但是很明显,理论上需要扩容2次的,结果只扩容了一次,且添加的时候,是在this.size之后进行添加,那么就会导致2者相互覆盖的问题 。

建议 : 多线程 千万不要用ArrayList ,请用Vector.


      

Vectory  :   线程安全的ArrayList,  在每一个add方法上面都加了Sychronized 。  初始化默认size=10,后续每次加多少就扩充多大。 当然,删除的时候 ,size也会相应减小。需要内存的连续空间  ,适合遍历查询,不适合插入和删除操作


LinkedList : 非线程安全 , 自身没有安全检测 。自身重写了add等方法 。多线程访问在断开某节点再连接新节点的时候,会在断开的节点重复连接,与预想不服,所以非线程安全。

不需要连续的内存空间  。适合  插入、删除,不适合遍历查询 。  初始化size=0 ,后续每次加多少SIZE就扩大多少 。









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值