(1) for (int i = initializer; i >=0; i--) //hard to loop backwards
(2) int limit = calculate_limit(); for (int i= 0; i< limit; i++)
(3) Type[] array = get_array(); for (Type obj : array)
(4) for (int i =0; i< array.length; i++) //gets array.length everytime
(5) for (int i=0; i < this.var; i++) //has to calculate what this.var is
(6) for (int i=0; i < obj.size(); i++) //even worse calls function each time
(7) Iterable list = get_list(); for (Type obj : list) //generic object based iterators slow!
前三个都在效率方面处于同一领域,如果可能的话,请避免第七个。这主要是为了帮助电池寿命,但也可能有助于Java SE代码。
我的问题是:为什么(7)很慢,而(3)很好?我认为这可能是(3)和(7)之间的数组和列表的区别。此外,正如Dan提到的那样,(7)创建了大量需要进行垃圾回收的小临时对象,我对Java现在有点生疏,有人能解释一下为什么吗?在他的talk video中的0:41:10处有一分钟的解释。