我正在研究ArrayList
中java.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)
?
这些额外的轮次会导致更糟糕的表现吗? (除了额外的工作和更差的可读性)
答案 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中分成小方法,然后为调用方法节省不可缩短的小时间。