4. ArrayList(使用频率最高)
底层数据结构是数组,查询快,增删慢;线程不安全,效率高
数组为什么是查询快?因为数组的内存空间地址是连续的。
ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10。
可以通过 new ArrayList(20)显式的指定用于存储对象的数组的长度。
当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。
由于ArrayList是数组实现,在添加元素的时候会牵扯到数组增容,以及拷贝元素,所以慢。数组是可以直接按索引查找,所以查找时较快。
我们来举一个栗子:
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("def");
list.add("abc");
list.add("abc");
list.add("ert");
list.add("qaz");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
if (iterator.next().equals("abc")) {
iterator.remove(); // 不能用list.remove,会引起异常
}
}
System.out.println(list);
}
}