因此,为了获得最有效的代码,我真的想知道Java size()
中的ArrayList
方法是如何工作的......它是否计算每个元素,遍历所有位置,就像一个简单的清单?或者只是通过注册的最后一个索引得到大小?
提前致谢!
答案 0 :(得分:4)
答案 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;
}