前段时间看《码农翻身》时,作者刘欣在末尾写了一个问题,写一个SimpleList,不需要考虑多线程等问题,只需要有两个核心逻辑点:
- 能往数组里添加数据,记录size,如果空间不够了则需要增大控件。
- 能删除指定位置的数据,并吧之后的数据向前移动。
其实这是ArrayList的子功能,ArrayList有SimpleList的完美实现。所以简略读了一下ArrayList的源码,发现写的确实超级简略,为了不用记录无聊的代码(说实话,代码确实很无聊,重要的是思想呀),所以我简略的分析了一下ArrayList中add、remove方法,其他的像addAll方法及get、toArray方法实现起来基本相同或及其简单,所以不再赘述。
话不多说,流程图如下:
ArrayList 添加删除.png
确实其中最复杂的地方应该就是扩容部分,简单说就是当需要扩容时,先计算出最小扩容数组长度,然后与原长度扩大至(原长度 + 原长度右移1位)的长度比较,最小值为扩容长度。扩容时使用Arrays.copyOf(elementData, newCapacity)
方法扩大数组长度。
网友评论