ArrayList基于动态数组实现,在添加和删除的时候存在扩容和缩容这样重新规划数组大小的机制。在ArrayList中,维护Object[] elementData数组来管理元素,但是ArrayList是动态可变的,所以elementData数组长度并不代表ArrayList实际元素个数,所以使用size显示实际元素个数

一、ArrayList 了解过吗?它是啥?有啥用?

众所周知,Java 集合框架拥有两大接口Collection和Map,其中,Collection麾下三生子List、Set和Queue。ArrayList就实现了List接口,其实就是一个数组列表,不过作为 Java 的集合框架,它只能存储对象引用类型,也就是说当我们需要装载的数据是诸如int、float等基本数据类型的时候,必须把它们转换成对应的包装类。
ArrayList的底层实现是一个Object数组:
既然它是基于数组实现的,数组在内存空间中是连续分配的,那必然查询速率非常快,不过当然也肯定逃不过增删效率低的缺陷。
另外,和ArrayList一样同样实现了List接口的、我们比较常用的还有LinkedList。LinkedList比较特殊,它不仅实现了List接口,还实现了Queue接口,所以你可以看见LinkedList经常被当作队列使用:
Queuequeue = new LinkedList