ArrayList 全解

HashMap全解有了,Redis全解有了,今天来个简单的ArrayList全解!废话不多说,开问!

ArrayList底层是什么?

ArrayList底层就是一个Object类型的数组。

ArrayList初始容量?

ArrayList 初始容量为0,第一次add之后扩容为10,类似懒加载。

ArrayList扩容机制,每次扩容多少?

每次扩容为当前容量的1.5倍。

扩容拷贝使用方法?

使用的是Arrays.copyOf()。

默认容量为10,第一次扩容后为15,那第二次扩容后数组长度?

22=15+7

ArrayList线程安全吗?

不安全

你说ArrayList线程不安全,请举个例子说明?

在这里插入图片描述

为什么会导致这个问题?

多个线程并发争抢资源类,且资源类没加锁!

那如何解决上面的情况?

使用Vector来代替List:
在这里插入图片描述

我们都知道Vector性能较低,有没有其他方式实现线程安全?

使用juc中的Collections.synchronizedList()
在这里插入图片描述

提醒你一下:知不知道什么叫写时复制?

这是使用JUC解决list多线程不安全的高级技术!CopyOnWriteArrayList
在这里插入图片描述

CopyOnWriteArrayList 是如何实现线程安全的?

CopOnWrite容器即写时复制容器。在往一个容器添加元素时,不直接往当前容器Object[]添加元素,而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] newElements,然后往新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器setArray(newElements),这样做的好处时可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素,所以CopyOnWrite容器也是一种读写分离的思想,读和写的容器不同。
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值