次のリストは、「Dalvik Virtual Machine Internals」と呼ばれる、2008年のGoogle I / Oトークからのものであり、オブジェクトのセットを最も効率の高いものから最も低いものの順にループする方法のリストです。
(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!
最初の3つは同じ効率領域にあり、可能であれば7つは避けてください。これは主にバッテリーの寿命を延ばすためのアドバイスですが、JavaSEコードにも役立つ可能性があります。
私の質問は、なぜ(7)が遅いのか、なぜ(3)が良いのかということです。(3)と(7)の配列とリストの違いかもしれないと思いました。また、Danが述べたように(7)は、GCする必要のある小さな一時オブジェクトを大量に作成しますが、私は最近Javaに少し錆びていますが、誰かがその理由を説明できますか?それは彼のトークビデオの0:41:10に1分間あります。