添加元素
扩容
构造ArrayList的时候,默认底层数组大小是10
public ArrayList(){
this(10);
}
ArrayList是基于动态数组实现的,底层数组不够就进行扩容,ensureCapacity扩容的时候把数组大小先乘以3,再除以2,最后加1
如果一次扩容得太大,必然造成内存空间浪费,如果一次扩容的不够那下一次扩容的操作会比较快到来,降低程序运行的效率
删除元素
ArrayList支持两种删除方式
- 按照下标删除
- 按照元素删除
把指定元素后面位置的所有元素,利用System,arraycopy方法整体向前移动一个位置
最后一个位置的元素指定为NULL,这样gc可以回收它
删除333元素插入元素
插入的时候,按照指定位置,把从指定位置开始的所有元素利用System.arraycopy方法做一个整体的复制,向后移动一个位置,向后移动一个位置
ArrayList的优缺点
- ArrayList 底层以数组实现,是一种随机访问模式,再加上它实现了RandomAccess接口,因此查找时非常快
- ArrayList在顺序添加一个元素的时候非常方便,只是往数组里面添加了一个元素而已
- 在删除,插入元素的时候,涉及到一次元素复制,如果复制的元素很多,那么就会比较耗费性能
ArrayList与Vector的区别
ArrayList 是非线程安全的,因为ArrayList中所有的方法都不是同步的,在并发下一定会出现线程安全问题
变成一个线程安全的List
List<String> synchronizedList = Collections.synchronizedList(list);
synchronizedList.add("hhh");
或者用vector
vector可以指定增长因子,如果指定了,那么扩容的时候会每次新的数组大小会在原数组的大小基础上加上增长因子,如果不指定增长因子,那么就给原数组大小*2
网友评论