size()如何在java ArrayList类中工作?

时间:2013-03-19 23:32:03

标签: java arraylist performance

因此,为了获得最有效的代码,我真的想知道Java size()中的ArrayList方法是如何工作的......它是否计算每个元素,遍历所有位置,就像一个简单的清单?或者只是通过注册的最后一个索引得到大小?

提前致谢!

5 个答案:

答案 0 :(得分:4)

永远不要伤害source code

public int size() {
    return size;
}

它返回一个实例变量 - 非常快。

答案 1 :(得分:2)

从最新的Java7开始,它只是读取成员字段值:

public int size() {
    checkForComodification();
    return this.size;
}

private void checkForComodification() {
    if (ArrayList.this.modCount != this.modCount)
        throw new ConcurrentModificationException();
}

答案 2 :(得分:1)

ArrayList中,有int属性用于存储当前大小(例如,称为size)。显然,为了提高效率,计算数组列表的大小应该是O(1)操作。即使在诸如LinkedList(双链表)之类的数据结构中,大小也会在属性中保持更新,以避免每次需要时都必须计算它。要更清楚地看到它,请查看OpenJDK中的source code,你会发现:

 /**
  * The size of the ArrayList (the number of elements it contains).
  *
  * @serial
  */
  private int size;

 /**
  * Returns the number of elements in this list.
  *
  * @return the number of elements in this list
  */
  public int size() {
      return size;
  }

答案 3 :(得分:0)

根据ArrayList的源代码,size()方法返回一个名为size的私有变量,它只是一个在每个add上递增的计数器。 / p>

答案 4 :(得分:0)

它读取一个字段变量。 Java 1.6的ArrayList.size()

/**
 * Returns the number of elements in this list.
 *
 * @return the number of elements in this list
 */
public int size() {
    return size;
}