|
|
1
13
我不认为它是“缓存”的,但它只是存储在一个字段中,所以它的速度足够快,可以频繁调用。
|
|
2
5
对。 快速查看Java源代码可以告诉您答案。 |
|
|
3
2
这是中的实现 OpenJDK version
所以它和方法调用一样好。热点不太可能缓存此方法返回的值,因此 你可以自己把它藏起来。除非分析表明这是一个瓶颈(不太可能),否则您应该关注可读性,而不是返回字段值的简单方法调用是否被缓存。 |
|
|
4
2
我不确定答案,但我的猜测是:不。对于Java编译器来说,除了特殊的casing ArrayList,没有办法知道调用的函数是非变异的,因此,size()的调用应该返回相同的值。因此,我发现Java编译器不太可能排除对size()的重复调用并将它们存储在临时值中。如果您需要这种优化级别,那么您应该自己将值存储在局部变量中。否则,是的,您将支付与调用size()方法相关的函数调用开销。但是请注意,对于ArrayList,size()方法是O(1)(尽管函数调用开销相当大)。就我个人而言,我会从循环中排除对size()的任何调用,并在适当的地方手动将它们存储在本地文件中。
编辑
|
|
|
5
0
ArrayList的明显实现是在字段内部存储大小。如果必须计算它,即使在调整大小之后,我也会非常惊讶。 |
|
|
6
0
为什么要这样?毕竟,ArrayList实现了一个由数组支持的列表接口。
我想它只是有一个
不过,我现在只看了API文档。 |
|
|
7
0
如果您定期迭代列表,但很少更新列表,那么有一个技巧可以奏效:
|
|
|
Mark Roworth · 构建MS SQL构造IN的C#等价物? 2 年前 |
|
|
Jack M · 在数组中查找素数时出现逻辑错误 2 年前 |
|
|
Alvaro Vasquez · 如何使用for循环添加数组? 2 年前 |