Untuk-Setiap Gelung vs. Iterator: Pertimbangan Kecekapan
Di Jawa, melintasi koleksi boleh dilakukan dalam pelbagai cara, salah satunya sedang menggunakan untuk setiap gelung atau iterator. Adalah berbaloi untuk membandingkan kecekapan mereka untuk membuat pilihan termaklum.
Untuk-Setiap Sintaks lwn. Iterator
Sintaks gelung baharu untuk setiap, yang diperkenalkan dalam Java 5, ialah pintasan khusus untuk menggunakan iterator. Di bawah tudung, ia melelar ke atas koleksi menggunakan antara muka lelaran yang sama seperti pendekatan lelaran tradisional.
Apabila Lelaran Lebih Cekap
Untuk operasi mudah seperti lelaran ke atas pengumpulan dan membaca elemennya, kedua-dua untuk setiap gelung dan iterator menawarkan kecekapan yang sama. Walau bagaimanapun, jika anda perlu melakukan operasi yang lebih kompleks pada koleksi, iterator memberikan fleksibiliti.
Sebagai contoh, jika anda menggunakan gelung "gaya-c" lama dengan get(i) untuk setiap elemen dalam koleksi, gelung ini mempunyai kerumitan masa O(n^2) untuk sesetengah struktur data seperti senarai terpaut. Ini kerana get(i) untuk senarai terpaut ialah operasi O(n).
Iterators, sebaliknya, mempunyai keperluan asas bahawa next() hendaklah operasi O(1). Oleh itu, gelung yang menggunakan lelaran akan mempunyai kerumitan masa O(n), jauh lebih pantas daripada gelung lama.
Cara Bytecode Mengesahkan Persamaannya
Untuk mengesahkan bahawa sintaks baru untuk setiap menggunakan iterator, anda boleh membandingkan kod bait yang dijana untuk Java berikut coretan:
// For-each loop for (Integer integer : a) { integer.toString(); }
// Iterator for (Iterator<Integer> iterator = a.iterator(); iterator.hasNext();) { Integer integer = iterator.next(); integer.toString(); }
Kod bait yang dijana untuk kedua-dua coretan adalah serupa dengan berkesan, menunjukkan bahawa gelung untuk setiap setiap pada asasnya menggunakan lelaran secara dalaman.
Memilih Pendekatan yang Tepat
Sambil meneroka koleksi, tiada perbezaan prestasi yang ketara antara menggunakan untuk setiap gelung atau iterator. Walau bagaimanapun, jika anda perlu mengubah suai atau mengalih keluar elemen semasa lelaran atau jika anda memerlukan lebih kawalan ke atas proses lelaran, iterator memberikan lebih fleksibiliti.
Untuk kebanyakan senario, sintaks untuk setiap gelung mencukupi dan selalunya diutamakan kerana kepada ringkas dan mudah dibacanya. Ia menawarkan prestasi yang sama seperti pendekatan iterator tradisional, mengurangkan kod boilerplate sambil mengekalkan kecekapan.
Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan Iterator Daripada Untuk-Setiap Gelung di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!