ArrayList中size()方法的java用途 1 周,3 日 Questions & Answers 311 size()方法是ArrayList类只是一个getter,还是它执行任何类型的计算 如果它是一个getter,那么如果我多次调用它,是否可以安全地假设它将在某个点内联
# 1 楼答案 如果你问调用“size()”是否有开销,答案是“否” 这里有一个关于类似方法String的类似讨论。长度(): In Java, for a string x, what is the runtime cost of s.length()? Is it O(1) or O(n)? 两种情况下的答案都是字符串。长度()和数组列表。size()-是“O(1)”
# 2 楼答案 由于getter只是返回一个字段,因此不会对性能产生负面影响。JIT足够智能,可以内联调用,这样就不会有函数调用开销 请参见此处的类似问题:Is ArrayList.size() method cached?
# 3 楼答案 size()方法不是一个标准的setter/getter,它是一个List方法,它被定义为给出list的大小(元素的数量) ArrayList通过以下方式实现它 public int size() { 230 return size; 231 } 它维护一个名为int的size变量,当我们添加它时,它会增加,删除时会减少
# 4 楼答案 如果您想真正了解size()方法是如何实现的,您可以下载GNU GPL下的java库源代码;OpenJDK 6源代码中的第196行 OpenJDK 7 Sources 关于内联,您可能希望阅读以下帖子: Inlining in Java
# 5 楼答案 是否ArrayList.size()将被内联取决于许多因素,但是,是的,至少在理论上,如果您引用size()足够多的时间,并且如果满足所有其他内联条件,那么它将被内联 在很大程度上,ArrayList只是一个类,与您可能编写的类没有什么不同。因此,它将受制于相同的内联规则/潜力 [刚刚查看了ArrayList的来源,以下是我的发现: public int size() { return size; } 这是你能得到的最普通的(和高度内联的)。所以我想说size()在几乎所有情况下都将内联,在这些情况下,您不会以某种方式严重模糊类类型。]
# 1 楼答案
如果你问调用“size()”是否有开销,答案是“否”
这里有一个关于类似方法String的类似讨论。长度():
In Java, for a string x, what is the runtime cost of s.length()? Is it O(1) or O(n)?
两种情况下的答案都是字符串。长度()和数组列表。size()-是“O(1)”
# 2 楼答案
由于getter只是返回一个字段,因此不会对性能产生负面影响。JIT足够智能,可以内联调用,这样就不会有函数调用开销
请参见此处的类似问题:Is ArrayList.size() method cached?
# 3 楼答案
size()
方法不是一个标准的setter/getter,它是一个List
方法,它被定义为给出list
的大小(元素的数量)ArrayList
通过以下方式实现它它维护一个名为
int
的size
变量,当我们添加它时,它会增加,删除时会减少# 4 楼答案
如果您想真正了解size()方法是如何实现的,您可以下载GNU GPL下的java库源代码;OpenJDK 6源代码中的第196行
OpenJDK 7 Sources
关于内联,您可能希望阅读以下帖子:
Inlining in Java
# 5 楼答案
是否
ArrayList.size()
将被内联取决于许多因素,但是,是的,至少在理论上,如果您引用size()
足够多的时间,并且如果满足所有其他内联条件,那么它将被内联在很大程度上,ArrayList只是一个类,与您可能编写的类没有什么不同。因此,它将受制于相同的内联规则/潜力
[刚刚查看了ArrayList的来源,以下是我的发现:
这是你能得到的最普通的(和高度内联的)。所以我想说
size()
在几乎所有情况下都将内联,在这些情况下,您不会以某种方式严重模糊类类型。]