ArrayList的源码分析(二)

上篇文章给大家介绍了arraylist集合源码的一些属性和扩容方式add方法,接下来再和大家来聊聊这个集合的一些源码

首先看看remove的方法,这个方法有两个,一个是根据下标删除对象,一个是根据对象删除

rangeCheck(index);是一个判断index参数的规范的,如果太长或者为负数则出现异常, 

modCount这个属性则是集合被修改的次数, 一个该集合的泛型变量接收到当前参数位置的对象,将当前集合长度减去方法的参数再减一, 这就是判断当前这个参数所代表的这个对象是否在当前集合中,判断如果在的话也就是 数字大于0, copy数组,对于这个System.arraycopy的方法我解释下:

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);  

  • 参数
  • src - 源数组。
  • srcPos - 源数组中的起始位置。
  • dest - 目标数组。
  • destPos - 目的地数据中的起始位置。
  • length - 要复制的数组元素的数量。
    这样复制的数组的销量是最快的.    这样copy之后就想到于当当原数组的index位置的下标+1开始向前移动,index下标位置被后面的代替,而数组的最后的两位将变得一致,不懂的可以自己测试一下这个方法,而 后面那个[--size]=null就是将最后面一位设置为null,这样就完成了按照下标删除的操作

接下来是按照集合中的对象去删除

这个东西就很好理解了,参数如果等于null的话就去整个数组里面找为null的然后删除,else中是通过equals方法去整个数组中去查找该对象,然后删除,这里用到了  fastRemove这个方法,我们来看看

是不是感觉这个方法很 眼熟,这不就是根据下标删除吗?没错,当它拿到你需要删除的对象的下标之后依然根据这个下标删除就行了

ArrayList的get方法就没什么好讲的了,因为当你知道了它的底层是数组的时候get下标拿到对象那不是很简单就能实现的吗

猜你喜欢

转载自blog.csdn.net/qq_41594146/article/details/84842763