1. Ditingkatkan untuk Tinjauan
Ditingkatkan untuk loop, juga dikenal sebagai foreach loop, digunakan untuk melintasi array dan wadah (kelas koleksi). Saat menggunakan foreach untuk mengulang melalui array dan elemen pengumpulan, tidak perlu mendapatkan array dan panjang pengumpulan, tidak perlu mengakses elemen array dan elemen pengumpulan berdasarkan indeks, yang sangat meningkatkan efisiensi dan kodenya jauh lebih sederhana.
2. Penjelasan situs web resmi Oracle
Jadi kapan Anda harus menggunakan loop untuk setiap? Kapan saja Anda bisa. Ini sangat indah kode Anda. Sayangnya, Anda tidak dapat menggunakannya di mana -mana. Pertimbangkan, misalnya, metode Expurgate. Program membutuhkan akses ke iterator untuk menghapus elemen saat ini. Loop untuk setiap iterator menyembunyikan iterator, jadi Anda tidak dapat menghubungi Hapus. Oleh karena itu, loop untuk setiap tidak dapat digunakan untuk penyaringan. Demikian pula tidak dapat digunakan untuk loop di mana Anda perlu mengganti elemen dalam daftar atau array saat Anda melintasi itu. Akhirnya, tidak dapat digunakan untuk loop yang harus mengulangi beberapa koleksi secara paralel. Kekurangan ini dikenal oleh para desainer, yang membuat keputusan kesadaran untuk pergi dengan konstruksi yang bersih dan sederhana yang akan mencakup sebagian besar kasus.
Jadi kapan Anda harus menggunakan loop untuk setiap? Tidak apa -apa kapan saja. Ini sangat mempercantik kode Anda. Sayangnya, Anda tidak dapat menggunakannya di mana pun. Pertimbangkan situasi ini, misalnya, metode penghapusan. Untuk menghapus elemen saat ini, program perlu mengakses iterator. Loop untuk setiap iterator, jadi Anda tidak dapat memanggil fungsi hapus. Oleh karena itu, loop untuk setiap tidak cocok untuk elemen penyaringan. Juga, loop yang perlu mengganti elemen saat iterasi melalui koleksi atau array tidak berlaku. Akhirnya, tidak cocok untuk penggunaan loop paralel dalam beberapa iterasi koleksi. Desainer harus memahami kekurangan ini dan secara sadar merancang struktur yang bersih dan sederhana untuk menghindari situasi ini. Jika Anda tertarik, Anda dapat melihat API situs web resmi. Jika Anda tidak tahu cara menemukan API di situs web resmi, silakan klik untuk membuka situs web resmi untuk melihat metode API.
3. Tingkatkan format untuk
untuk (ketik nama variabel koleksi atau elemen array: objek koleksi atau objek array) {pernyataan java yang merujuk nama variabel;}Penjelasan Situs Web Resmi:
untuk (timertask t: c)
t.cancel ();
Saat Anda melihat usus besar (:) Bacalah sebagai "di." Loop di atas dibaca sebagai "untuk setiap timertask t di c." Seperti yang Anda lihat, konstruk untuk pencabutan gabungan dengan indah dengan obat generik. Ini menjaga semua jenis keamanan, sambil menghilangkan kekacauan yang tersisa. Karena Anda tidak perlu mendeklarasikan iterator, Anda tidak harus memberikan deklarasi generik untuk itu. (Kompiler melakukan ini untuk Anda di belakang, tetapi Anda tidak perlu khawatir dengan itu.)
Makna umum adalah:
Ketika Anda melihat usus besar (:), itu berbunyi "Masuk." Loop di atas berbunyi "bepergian setiap elemen timertask di c." Seperti yang dapat Anda lihat, struktur untuk setiap saat dikombinasikan dengan obat generik. Ini mempertahankan semua jenis keamanan sambil menghilangkan kebingungan yang tersisa. Karena Anda tidak perlu menyatakan iterator, Anda tidak harus menyediakannya dengan deklarasi generik. (Kompiler telah melakukannya di belakang Anda, Anda tidak perlu peduli.)
Pengalaman sederhana:
1. Ditingkatkan untuk array traversal
Paket cn.jason01; // ditingkatkan untuk traversal array kelas publik fortest01 {public static void main (string [] args) {int [] array = {1,2,3}; untuk (elemen int: array) {System.out.println (elemen); }}}2. Ditingkatkan untuk koleksi traversal
Paket cn.jason01; import java.util.arraylist; kelas publik fortest {public static void main (string [] args) {// inferensi generik, Anda dapat menulis atau tidak menulis string arraylist <string> array = new arraylist (); array.add ("a"); array.add ("b"); array.add ("c"); untuk (string string: array) {system.out.println (string); }}}4. Meningkatkan prinsip yang mendasari untuk
Lihat kode terlebih dahulu
Paket cn.jason01; impor java.util.arraylist; import java.util.iterator;/** * ditingkatkan untuk prinsip yang mendasari * * @author cassandra * @Version 1.1 */Kelas publik Fortest {public static void main (string [] args) {// inference generic class {public static or or (string [] args) {// inference generic class {public static or or (string []. Beberapa spesifikasi perlu ditulis. ArrayList <String> array = new arrayList (); // tambahkan elemen array.add ("a"); array.add ("b"); array.add ("c"); // tingkatkan untuk sistem implementasi. adalah, prinsip implementasi yang mendasarinya System.out.println ("--- Reverse Compile ----"); String String; untuk (iterator iterator = array.iterator (); iterator.hasnext (); system.out.println (string)) {string = (string) iterator.next ();} // iterator mengimplementasikan System.out.println ("------------"); untuk (iterator <string> i = array.iterator (); i.hasnext (); System.out.println (i.next ()))) {} // Biasa untuk mengimplementasikan System.out.println ("-----------"); untuk (int x = 0; x <array.size (); x ++) {System.out.println (array.get (x));}}Dari kode di atas, kita dapat melihat bahwa lapisan yang mendasarinya diimplementasikan oleh iterator, dan peningkatan untuk benar -benar menyembunyikan iterator, sehingga kode alami jauh lebih sederhana tanpa membuat iterator. Ini juga merupakan alasan mengapa peningkatan untuk diluncurkan, yaitu untuk mengurangi kode, memfasilitasi koleksi dan array yang melintasi, dan meningkatkan efisiensi.
Catatan: Karena peningkatan untuk menyembunyikan iterator, saat menggunakan peningkatan untuk melintasi koleksi dan array, Anda harus terlebih dahulu menentukan apakah itu nol, jika tidak, pengecualian pointer nol akan dilemparkan. Alasannya sangat sederhana. Lapisan yang mendasari perlu menggunakan objek array atau pengumpulan untuk memanggil metode iterator () untuk membuat iterator (iterator iterator adalah antarmuka, sehingga perlu diimplementasikan dengan subkelas). Jika nol, pengecualian pasti akan dilemparkan.
5. Tingkatkan penerapan dan keterbatasan untuk
1. Penerapan
Cocok untuk traversal koleksi dan array.
2. Keterbatasan:
① Set tidak bisa nol karena lapisan yang mendasarinya adalah iterator.
② Iterator tersembunyi, sehingga koleksi tidak dapat dimodifikasi (ditambahkan dan dihapus) saat melintasi koleksi.
③Notnot mengatur tanda sudut.
6. Penjelasan terperinci tentang penggunaan peningkatan untuk
1. Penggunaan yang ditingkatkan untuk array
Paket cn.jason05; import java.util.arraylist; import java.util.list;/** * ditingkatkan untuk penggunaan * * @author cassandra */kelas publik fordemo {public static main (string [] args) {// traverse array int [] arr = {1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2; untuk (int x: arr) {system.out.println (x); }}}2. Tingkatkan penggunaan untuk koleksi
package cn.jason05;import java.util.ArrayList;import java.util.List;/** * Enhanced for usage* * @author cassandra */public class ForDemo { public static void main(String[] args) { // traverse the collection ArrayList<String> array = new ArrayList<String>(); array.add ("halo"); array.add ("dunia"); array.add ("java"); untuk (string s: array) {system.out.println (s); } // Set adalah null, lempar nullpointerException null pointer list <string> list = null; if (list! = null) {for (string s: list) {system.out.println (s); }} // Tingkatkan penambahan atau modifikasi elemen untuk, lempar concurrentModificationException secara bersamaan dimodifikasi untuk (string x: array) {if (array.contains ("java")) array.add (1, "love"); }}3. Kombinasi generik dan peningkatan yang sempurna untuk
Catatan: Itu harus dikombinasikan dengan sempurna dengan obat generik, jika tidak, Anda harus mengubah secara manual ke bawah.
1. Tidak ada efek generik, tidak dapat menggunakan peningkatan untuk
Kelas Siswa
paket cn.jason01; siswa kelas publik {private string name1; name string pribadi2; siswa publik () {super (); } public student (string name1, string name2) {super (); this.name1 = name1; this.name2 = name2; } public String getName1 () {return name1; } public void setName1 (string name1) {this.name1 = name1; } public String getName2 () {return name2; } public void setName2 (string name2) {this.name2 = name2; }}Kode uji
Paket cn.jason01; import java.util.arraylist; import java.util.iterator; import java.util.list; test kelas publik02 {public static void main (string [] args) {// buat set 1 daftar daftar1 = new arraylist (); list1.add ("a"); list1.add ("b"); list1.add ("c"); // buat set 2 daftar daftar2 = arraylist baru (); list2.add ("d"); list2.add ("e"); list2.add ("f"); // buat set tiga daftar daftar3 = arraylist baru (); // lintasi set pertama dan kedua dan tambahkan elemen untuk mengatur tiga untuk (iterator i = list1.iterator (); i.hasnext ();) {// system.out.println (i.next ()); String s = (string) i.next (); untuk (iterator j = list2.iterator (); j.hasnext ();) {// list2.add (siswa baru (s, j.next ())); String ss = (string) j.next (); Daftar3.Add (Siswa Baru (S, SS)); }} // lintasi set tiga dan output elemen siswa st; untuk (iterator k = list3.iterator (); k.hasnext (); System.out .println (stringBuilder baru (). append (st.getname1 ()). append (st.getname2 ()))) {st = (student) k.next (); }}}Jika kode di atas menghapus dua baris komentar, program akan melaporkan kesalahan, karena koleksi tidak menyatakan jenis elemen itu, dan iterator secara alami tidak tahu jenis apa itu. Jadi jika tidak ada obat generik, maka Anda perlu mengubah ke bawah, Anda hanya dapat menggunakan iterator, bukan peningkatan.
2. generik dan peningkatan untuk
Ubah kode di atas
package cn.jason01;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * Enhance the perfect combination of for and generics* * @author cassandra */public class Test03 { public static void main(String[] args) { // Create set 1 List<String> list1 = new ArrayList<String>(); list1.add ("a"); list1.add ("b"); list1.add ("c"); // Buat Set 2 Daftar <String> list2 = ArrayList baru <string> (); list2.add ("d"); list2.add ("e"); list2.add ("f"); // Buat Set Tiga Daftar <Sahasiswa> Daftar3 = ArrayList baru <spiness> (); //// melintasi set pertama dan kedua dan menambahkan elemen untuk mengatur tiga untuk (string s1: list1) {for (string s2: list2) {list3.add (siswa baru (s1, s2)); }} // Lintasi elemen set tiga dan output untuk (student st: list3) {system.out.println (stringBuilder baru (). append (st.getname1 ()). append (st.getname2 ())); }}}4. Empat Metode Traversal Koleksi Daftar
Ada metode iterator () di antarmuka koleksi, yang mengembalikan tipe iterator dan memiliki iterator sebagai iterator. Ada metode ListIterator () dalam daftar, jadi ada daftar koleksi tambahan. Subclasses LinkedList -nya, ArrayList, dan Vector Semua Daftar Implement dan Antarmuka Koleksi, sehingga Anda semua dapat menggunakan dua iterator untuk dilintasi.
Pengujian Kode
Paket cn.jason05; impor java.util.arraylist; impor java.util.iterator; import java.util.list; impor java.util.listiterator;/*** Ini adalah empat metode daftar penawaran. * @Author cassandra */kelas publik fordemo01 {public static void main (string [] args) {// Buat daftar koleksi <string> daftar = arraylist baru <string> (); list.add ("halo"); list.add ("dunia"); list.add ("java"); // metode 1, iterator iterator traversal iterator <string> i = list.iterator (); while (i.hasnext ()) {string s = i.next (); System.out.println (s); } // Metode 2, ListIterator iterator Traversal Collection ListIterator <String> lt = list.listIterator (); while (lt.hasnext ()) {string ss = lt.next (); System.out.println (SS); } // Metode 3, biasa untuk koleksi traversal untuk (int x = 0; x <list.size (); x ++) {string sss = list.get (x); System.out.println (SSS); } // Metode 4, tingkatkan untuk koleksi traversal untuk (string ssss: list) {system.out.println (sss); }}}5. Metode Koleksi Traversal dalam 2
Karena koleksi set tidak memiliki metode GET (int index), tidak ada biasa untuk loop, tidak ada metode listiterator () dalam set, jadi tidak ada daftarterator listiterator. Jadi hanya ada dua cara untuk dilintasi.
Pengujian Kode
Paket cn.jason05; import java.util.hashset; import java.util.iterator; import java.util.set; kelas publik fortest03 {public static void main (string [] args) {set <string> set = new Hashset <string> (); set.add ("halo"); set.add ("dunia"); set.add ("java"); // metode 1, iterator iterator iterator it = set.iterator (); while (it.hasnext ()) {System.out.println (it.next ()); } // Metode 2, tingkatkan untuk koleksi traversal untuk (string s: set) {system.out.println (s); }}}7. Ringkasan
1. Tingkatkan penerapan dan keterbatasan untuk
Penerapan: Berlaku untuk traversal koleksi dan array.
keterbatasan:
① Set tidak bisa nol karena lapisan yang mendasarinya adalah iterator.
② tanda sudut tidak dapat diatur.
③ Iterator tersembunyi, sehingga koleksi tidak dapat dimodifikasi (ditambahkan dan dihapus) saat melintasi koleksi.
2. Hanya dengan meningkatkan kombinasi untuk dan obat generik dalam koleksi dapat peran fitur baru dapat dimainkan.
3. Sangat penting untuk melihat fitur -fitur baru dari situs web resmi. Anda harus tahu alasan dan alasannya. Hanya dengan mengetahuinya di dalam hati Anda, Anda dapat menggunakannya dengan bebas.
Ringkasan paling lengkap dari penggunaan loop for pada artikel di atas "Java New Fitur" adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.