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>();
网友评论