为了账号安全,请及时绑定邮箱和手机立即绑定

关于ArrayList源码的问题,大佬快进

关于ArrayList源码的问题,大佬快进

墨色风雨 2018-08-13 11:10:36
问题是这样的,看下边这段代码public boolean addAll(int index, Collection<? extends E> c) {rangeCheckForAdd(index);    Object[] a = c.toArray();    int numNew = a.length;     ensureCapacityInternal(size + numNew);  // Increments modCount    int numMoved = size - index;    if (numMoved > 0)         System.arraycopy(elementData, index, elementData, index + numNew,                          numMoved);     System.arraycopy(a, 0, elementData, index, numNew);     size += numNew;    return numNew != 0; }这个方法一开始先调用了rangeCheckForAdd(index)方法,这个方法内部是这样的private void rangeCheckForAdd(int index) {if (index > size || index < 0)throw new IndexOutOfBoundsException(outOfBoundsMsg(index));}也就是一开始就判断了index与size的大小问题,那么为什么下边这段代码还需要加个大于0的判断呢int numMoved = size - index;if (numMoved > 0)System.arraycopy(elementData, index, elementData, index + numNew,numMoved);ArrayList的增加数据中,只有这个增加方法增加了这个判断语句
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

因为size可能会等于index


查看完整回答
反对 回复 2018-09-14
  • 1 回答
  • 0 关注
  • 666 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信