Java for循环中的内存管理和速度
我刚刚在一本教科书上读到过,所以我想知道这是否是真的 比方说,我们有一个数组,其中包含一些我们想要迭代的值:Java for循环中的内存管理和速度,java,performance,loops,memory,Java,Performance,Loops,Memory,我刚刚在一本教科书上读到过,所以我想知道这是否是真的 比方说,我们有一个数组,其中包含一些我们想要迭代的值: for(int x=0;x
for(int x=0;x
现在,每次它跳回到循环的开始,它都必须重新计算数组的长度。因此,这本书建议,最好创建一个该长度的整数,并将x与该整数进行比较,而不是将数组长度进行比较
for(int x=0,int length=array.length;x
因此,根据我的理解,第一个版本看起来比较慢,但是节省了内存,而在第二个版本中,我们使用了更多的空间来加快速度。但我从未在实践中见过第二个版本,所以我想知道什么代码更适合使用 提前谢谢 现在,每次它跳回到循环的开始,它都必须重新计算数组的长度 完全不真实。数组长度作为数组的一部分存储在Java中 从: 数组类型的成员包括以下所有成员:
- 公共最终字段
,其中包含数组的组件数。长度可以是正或零长度
- 公共方法
,它重写类clone
对象中同名的方法,并且不抛出任何已检查的异常。数组类型
的T[]
方法的返回类型为clone
多维数组的克隆是浅层的,也就是说它只创建一个新数组。子阵列是共享的T[]
- 从类
;对象继承的所有成员
唯一没有继承的方法是它的对象
方法克隆
x
与该整数(而不是数组长度)进行比较
这是一本以Java为中心的书吗?如果是这样,立即扔掉它,买一本新书。出现这种根本性的错误是对书籍质量的一个可怕的信号。使用可读性更好的(第一个),直到您能够证明性能已经成为应用程序中的一个问题。正如@Jason所说,数组将长度存储为一个公共(非计算)字段。如果那本书是关于Java的,你需要立即扔掉它。以关于Java为条件,我有足够的信息得出结论,这是一本糟糕的书。@Jason哦,伙计,30美元白白浪费了。无论如何谢谢你!如果要使用带有
size()
和get(index)
的常规for循环来迭代列表
,可能会有所帮助。尽管如此,我还是无法给出一个示例List
实现,它具有昂贵的size()
(可能受益于缓存)和便宜的get(index)
。无论如何,您可能最好使用列表迭代器。
for(int x = 0; x < array.length; x++) {
//some code
}
for(int x = 0, int length = array.length; x < length; x++) {
//some code
}