ArrayList

在Java中,因为List集合是有序的,所以List下面的实现类ArrayList和LinkedList也是有序的,
ArrayList的特点:有序,查询(get)和设置(set)快,删除(remove)和增加(add)慢,可以存入null值,非线程安全,可以存入重复数据
创建ArrayList对象时有两个构造方法
ArrayList
ArrayList
从图片上面可以看到ArrayList底层用数组实现的,因为在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式,而有参构造传入的是要创建的ArrayList元素的个数,因为ArrayList初始化的容量是10,如果ArrayList对象的容量超过10,则会copy数组,每次都会copy原数组的1.5倍,耗费资源而且影响效率
这就是添加和删除慢的原因所在,但是如果要删除的元素在集合的最后一个,几乎不影响,ArrayList
如果我们知道ArrayList元素中要创建元素的个数,首先应选用有参构造去创建ArrayList对象。
查询和更改快:
因为底层使用数组实现的,基于数组的特性,可以随机访问。
为什么Object[] elementData用transient修饰?
ArrayList实现了Serializable接口,ArrayList可能会序列化,而elementData未必是满的,elementData容量是10,假如里面只有2个元素,我们只序列化这两个元素,因此ArrayList中重写了writerObject方法,
ArrayList
这样做的原因:
1、加快序列化的速度
2、减小可序列化之后的文件大小