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

ArrayList源码中实现Iterator接口中的next方法时,为什么使用定义一个Object[] elementData。

ArrayList源码中实现Iterator接口中的next方法时,为什么使用定义一个Object[] elementData。

萧十郎 2019-03-01 10:47:00
ArrayList源码中实现Iterator接口中的next方法时,为什么定义Object[] elementData = ArrayList.this.elementData,然后从定义的elementData数组上取值。 return (E) elementData[lastRet = i]。而不是直接使用 ArrayList.this.elementData[lastRet = i]? 源码: public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; }
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

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

如果这么写:

if (i >= ArrayList.this.elementData.length)
    throw new ConcurrentModificationException();
cursor = i + 1;
return (E) ArrayList.this.elementData[lastRet = i];

那么程序会多一次不必要的寻址。

查看完整回答
反对 回复 2019-03-01
?
慕标5832272

TA贡献1966条经验 获得超4个赞

依我看来这应该主要是为了使得代码更加的简洁

查看完整回答
反对 回复 2019-03-01
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

为了少敲几下,以及代码的可读性。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 624 浏览

添加回答

举报

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