我正在研究java.util
中ArrayList
的实现,很多方法对我来说似乎没什么用,它们只会让代码更难以阅读。例如:
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
E elementData(int index) {
return (E) elementData[index];
}
为什么不直接在 public E get(int index)
中转换 elementData
?
这些额外的回合会导致性能变差吗? (除了额外的工作和较差的可读性)
最佳答案
Why not cast elementData in public E get(int index) directly?
因为 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 更好。
Do these extra rounds lead to worse performance?
不,JVM可以优化这个小方法的调用,并更好地划分为Java中的小方法,然后为调用方法节省不可减少的小时间。
关于java - 为什么 ArrayList 同时具有 get 和 elementData 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35199859/