ArrayList

作者: 那谁319 | 来源:发表于2019-06-22 16:47 被阅读0次
/**
 * 线程不安全
 * 当初始化ArrayList对象
 * 1、当初始化ArrayList 没有指定时默认初始化大小为10
 * <p>
 * add操作执行逻辑
 * 2、首先判断是否需要扩容ArrayList的扩容逻辑,
 * 判断是否为空集合,如果是空集合,则扩容参数(需要的最小空间容量)大小为10,否则扩容参数为已写入的数量+1
 * 如果需要扩容的值(需要的最小空间容量)小于数组的大小,则不必扩容。
 * 否则,走扩容判断逻辑
 * 2.1 原来数组的大小加上对原来的数组长度右移一位(取模运算)
 * 2.2 判断新容量是否大于已写入的数量+1(需要的最小容量)
 * 2.2 如果大于的话,则取扩容大小为(新容量为2.1的值),选大的值主要是为了减少扩容的次数
 * 2.3 如果小于的话,则取扩容大小为(需要的最小容量)
 * 2.4 如果扩增的新的容量的只值过大(大于 Integer.MAX_VALUE - 8),取最大值
 * 2.4 ArrayList扩容时数据的处理,全copy到新的指定长度的对象
 * <p>
 * 3、把添加的数据赋值到指定位置的数组中
 * <p>
 * get操作
 * 获取数组指定位置的数据
 * <p>
 * 移除操作
 * <p>
 * remove(int index),
 * 获取移除位置的元素,通过size - index - 1计算移动元素的数量,
 * 将原数据数组的指定位置的数据向前移动一个位置,然后将数组的最后一位设置为null
 * remove(Object o)
 * 从头开始循环遍历数组,判断元素是否等于指定移除的值,如果过等于走remove(int index)的移除逻辑,
 * 并且不在判断数组中是否还有相等的值
*/

相关文章

网友评论

      本文标题:ArrayList

      本文链接:https://www.haomeiwen.com/subject/ljtexctx.html