ArrayList 继承与实现关系
数组的相关属性
ArrayList底层是一个Object[] 数组,既然是数组,那么底层的工具类大多是会用到Arrays工具类去实现。
函数探索
来看看构造函数 有三个构造函数,分别对应不同的生成内容。
来看看添加 扩容
总结:数组扩容为1.5倍,并且每次扩容都会进行范围判定,这在我们一些开发过程中,对于入参的值进行有效判断是非常必要的。必要在可恢复异常的时候,我们可以抛出异常防止程序奔溃。
其中,我们看到modCount这个属性,这就要涉及到常见的面试题了。我们来看看remove方法。
我们来看一个例子
探索remove方法
此时你删除了一个元素,但是modCount的值进行+1操作后。那么遍历下一个参数时的next方法时,其实是在AbstractList里的私有类Itr里的方法的next。
因为remove方法使得modCount加1,但是一开始赋值的expectedModCount并没有修改,就会抛出异常。
解决方案:
利用Iterator
利用CopyAndWriteArrayList
利用倒叙删除法
利用增强for循环跳出,使用break;
方法参考:
https://blog.csdn.net/weixin_38970751/article/details/84349920
来看看检索
tips:如有不对的地方,请反馈