前言
妹有前言
什么是Array?什么是ArrayList?我们该用哪个?
Array是一个很常见的数据结构,很多语言都内置了Array。声明一个Array的同时就必须要进行实例化(初始化)也就是确定其Array长度,它只能存储同一数据类型的数据。
1 | //声明并初始化Array |
ArrayList可以说是Array的企业版(haha),它也是常见的数据结构。不需要直接声明后立即初始化,长度是根据需要而改变的。它可以存放不同类型的数据,但它存储的并不是int,float,double…,而是Integer,Float,Double…(但JAVA中存在自动装箱,所以并不用担心)
1 | //声明并初始化ArrayList(并不需要同时进行) |
Array的性能
是要优于ArrayList的,但因为数组在存储数据时是按顺序存储的,存储数据的内存也是连续的,所以它的特点就是寻址读取数据比较容易,插入
和删除
是比较困难的。加上Array只能存储同一种数据类型的数据且长度是固定,so,当能确定长度且数据类型一致的时候我们可以使用Array,其他时候则使用ArrayList。
ArrayList related properties
1 | //ArrayList序列号,用于判断序列化文件是否已经失效 |
ArrayList Constructors
1 | /** |
ArrayList add()
ArrayList在每一次添加数据时,都会执行ensureCapacityInternal()检查是否超出数组容 量
这里的扩容有许多细节可以详述,我们留到下一篇博文。
1 | /** |
ArrayList Remove()
1 | /** |
ArrayList set()
1 | /** |
为什么这里要返回一个oldValue?没什么,只是List接口给set方法的一个API设计而已。set方法严格遵守了这个约定。ps:感谢ber哥
ArrayList get()
1 |
|
最后
通过阅读ArrayList的源码后才发现,JDK设计的精妙。就像扩容机制一样,保证要存多少个元素,就只分配多少空间资源,保证空间资源不被浪费。这应该只是冰山一角。。。。
额哈哈哈哈哈