java - 为什么 ArrayList 同时具有 get 和 elementData 方法?

标签 java arraylist

我正在研究java.utilArrayList的实现,很多方法对我来说似乎没什么用,它们只会让代码更难以阅读。例如:

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/

相关文章:

java - (HBase) 错误 : JAVA_HOME is not set and Java could not be found

java - ArrayList书籍类

java - 如何将此 ArrayList 传递给新 Activity

java - 如何使用另一个ArrayList的对象创建一个ArrayList?

Java 连接被拒绝

java - 显式锁与隐式锁

java - 将 BigDecimal 显示为整数,同时保留原始值

Java API 从 CSV 文件创建对象

javascript - 将字符串转换为数组数组

java - 在 Java 中使用集合的正确方法?