ArrayList的原理

2019-12-17  本文已影响0人  生不悔改

ArrayList的特点:

1.一个Object类型的数组

2.默认长度是10,每次扩容后的长度都是:原长度(10)+原长度*0.5(如果结果是小数取整)

3.扩容后会调用copy()方法

4.线程不安全

新建一个ArrayList的底层就是新建一个Object的数组,默认值大小是10(JDK1.8版本),这里要注意其实实际在JDK1.8中你创建ArrayLis其实是没有长度的,只有在第一次调用ArrayList的add()方法时才会自动扩容到10,如果在加入10个元素后,在加入第11个元素的时候,ArrayList会在当前的基础上扩容0.5倍,即会在长度10扩容到15(当遇到小数时只取整数值),扩容的过程就是新建一个ArrayList然后将之前的ArrayList的元素全部调用copy()方法复制到新new的ArrayList里面。

解决线程不安全的问题有以下三种:

方法一:解决ArrayList线程不安全的方法一:使用Vector

                List list = new Vector();

方法二:解决ArrayList线程不安全的方法二:使用Collections集合工具类中的synchronizedList()

                List list = Collections.synchronizedList(new ArrayList());

方法三:解决ArrayList线程不安全的方法三:使用Collections集合工具类中的 CopyOnWriteArrayList()

                List<String> list = new CopyOnWriteArrayList<String>();

上一篇下一篇

猜你喜欢

热点阅读