为什么同时为ArrayList提供get和elementData方法?

时间:2016-02-04 11:31:09

标签: java arraylist

我正在研究ArrayListjava.util的实现,而且很多方法对我来说似乎毫无用处,它们只会使代码更难以阅读。例如:

public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}


 E elementData(int index) {
    return (E) elementData[index];
}

为什么不直接在elementData投射public E get(int index)

这些额外的轮次会导致更糟糕的表现吗? (除了额外的工作和更差的可读性)

1 个答案:

答案 0 :(得分:2)

  

为什么不直接在public E get(int index)中转换elementData?

因为elementData方法使用多个地方:

public E set(int index, E element) {
   ...
   E oldValue = elementData(index);

public E remove(int index) {
   ...
   E oldValue = elementData(index);

public E set(int index, E e) {
   ...
   E oldValue = ArrayList.this.elementData(offset + index);

public E get(int index) {
   ...
   return ArrayList.this.elementData(offset + index);

在任何地方编写(E) elementData[index]都是丑陋而糟糕的Java预测,例如(E) ArrayList.this.elementData[offset + index],Java中的小方法比copypast更好。

  

这些额外轮次会导致更糟糕的表现吗?

Nop,JVM可以优化这个小方法的调用,并在Java中分成小方法,然后为调用方法节省不可缩短的小时间。