前言
在Java语言里,集合是非常重要的一种数据结构,而ArrayList这种数据结构又是我们使用最为广泛的,所以对于深入理解ArrayList是非常有帮助的,而对于ArrayList最好的学习方式就是看JDK的源码。本文就大致的介绍一下ArrayList中最常用的一些方法,并研究下ArrayList方法中的实现细节。
ArrayList特点
底层是数组数据结构。由于本质是数组,所以实现随机访问,而且速度较快,按照元素插入的顺序保持数据。删除和移动元素性能较低,因为会导致整个集合元素的移动。集合中的元素是可以重复的。有顺序。线程不安全的
ArrayList常用方法
1、构造方法
总结:ArrayList底层其实就是一个Object类型的数组,并且通过注释也可以得知,初始化的长度为10。
2、add(E element)方法
总结:
a、通过文档注释可以得知调用add方法的时候实际上是将元素追加到了列表末尾。
b、elementData[size++] = e;表达的含义是将这个元素添加到这个数组中,并且数组的长度加1。
c、调用add方法永远返回的true。
d、ensureCapacityInternal(size + 1);通过注释可以知道这个方法用来动态扩容,其核心方法是grow方法,可以看到,有一个copyOf操作,目的其实就是数组拷贝来达到扩容的目的。
3、get(int index)方法
总结:调用get方法实际上就是通过下标获取数组中的索引对应的元素。
4、size()方法
总结:调用size方法获取的是这个元素的数量。注意:实际上获取的是数组的长度,而不是这个List集合的容量。
5、clear()方法
总结:
a. clear方法将这个数组中的元素全部置为null。
b. 并且设置数组的长度size=0。
6、isEmpty()方法
总结:实际上就是判断size是否为0,如果为0则表示集合为空,否则就表示集合不为空。
ArrayList总结
通过上面列举的例子可以得到ArrayList本身就是一个数组,通过查看源代码也不难看出JDK设计的精妙,还有就是源代码其实也不是我们想象的那么高深莫测,只要慢慢的去啃,相信自己可以达到自己的目标。
每日一题
使用cache命中率最高的算法是()
A、先进先出算法FIFO
B、随机算法RAND
C、先进后出算法FILO
D、替换最近最少使用的块算法LRU