1. محسّن لنظرة عامة
يتم تعزيز الحلقة ، والمعروفة أيضًا باسم Foreach Loop ، لاجتياز المصفوفات والحاويات (فئات التجميع). عند استخدام Foreach للحلق من خلال المصفوفات وعناصر التجميع ، ليست هناك حاجة للحصول على المصفوفة والتجميع ، ولا حاجة للوصول إلى عناصر الصفيف وعناصر التجميع بناءً على الفهرس ، مما يحسن الكفاءة بشكل كبير والرمز أكثر بساطة.
2. شرح موقع أوراكل الرسمي
إذن متى يجب عليك استخدام حلقة EACH؟ في أي وقت يمكنك. انها حقا جميلة رمز الخاص بك. لسوء الحظ ، لا يمكنك استخدامه في كل مكان. النظر ، على سبيل المثال ، طريقة expurgate. يحتاج البرنامج إلى الوصول إلى التكرار من أجل إزالة العنصر الحالي. تخفي الحلقة من أجل EACH التكرار ، لذلك لا يمكنك الاتصال بإزالة. لذلك ، فإن حلقة EACH غير قابلة للاستخدام للتصفية. وبالمثل ، لا يمكن استخدامها للحلقات حيث تحتاج إلى استبدال العناصر في قائمة أو صفيف أثناء عبورها. أخيرًا ، لا يمكن استخدامها للحلقات التي يجب أن تتكرر عبر مجموعات متعددة بالتوازي. عرف المصممون هذه أوجه القصور ، الذين اتخذوا قرارًا وعيًا بالذهاب مع بنية نظيفة وبسيطة من شأنها أن تغطي الغالبية العظمى من الحالات.
إذن متى يجب عليك استخدام حلقة EACH؟ لا بأس في أي وقت. هذا حقا تجميل رمز الخاص بك. لسوء الحظ ، لا يمكنك استخدامه في أي مكان. النظر في هذه المواقف ، على سبيل المثال ، طريقة الحذف. من أجل إزالة العنصر الحالي ، يحتاج البرنامج إلى الوصول إلى التكرار. تخفي الحلقة من أجل EACH التكرار ، لذلك لا يمكنك استدعاء وظيفة الحذف. لذلك ، فإن الحلقات من أجل ECH ليست مناسبة لتصفية العناصر. أيضًا ، لا تنطبق الحلقات التي تحتاج إلى استبدال العناصر عند التكرار من خلال مجموعة أو صفيف. أخيرًا ، ليس مناسبًا لاستخدام الحلقة المتوازية في تكرارات مجموعة متعددة. يجب أن يفهم المصممون هذه العيوب وتصميم بنية نظيفة وبسيطة بوعي لتجنب هذه المواقف. إذا كنت مهتمًا ، فيمكنك عرض واجهة برمجة تطبيقات الموقع الرسمي. إذا كنت لا تعرف كيفية العثور على واجهة برمجة التطبيقات على الموقع الرسمي ، فيرجى النقر لفتح الموقع الرسمي لعرض طريقة API.
3. تعزيز التنسيق
لـ (اكتب اسم المجموعة أو عنصر المجموعة: كائن المجموعة أو كائن الصفيف) {java عبارة تشير إلى اسم المتغير ؛}تفسير الموقع الرسمي:
لـ (TimerTask T: C)
T.Cancel () ؛
عندما ترى القولون (:) اقرأها على أنها "في". تقرأ الحلقة أعلاه باسم "لكل TimerTask T في C." كما ترون ، يجمع البناء من أجل EACH بشكل جميل مع الأدوية الجيلية. إنه يحافظ على كل نوع السلامة ، مع إزالة الفوضى المتبقية. نظرًا لأنك لست مضطرًا إلى إعلان التكرار ، فلا يتعين عليك تقديم إعلان عام لذلك. (المترجم يقوم بذلك من أجلك خلف ظهرك ، لكنك لا تحتاج إلى قلقك به.)
المعنى العام هو:
عندما ترى القولون (:) ، فإنه يقرأ "تعال". تقرأ الحلقة أعلاه "السفر لكل عنصر من عناصر timertask في C." كما ترون ، يتم دمج الهيكل الخاص بـ EACH تمامًا مع الأدوية الجيلية. يحتفظ بجميع أنواع الأمن مع إزالة الارتباك المتبقي. نظرًا لأنك لست مضطرًا إلى إعلان التكرار ، فلن تضطر إلى تزويده بإعلان عام. (قام المترجم بذلك خلفك ، لست بحاجة إلى الاهتمام به.)
تجربة بسيطة:
1. تعزيز لصفائف اجتياز
Package Cn.Jason01 ؛ // المحسّن لفئة Arvarsal Array Public Fortest01 {public static void main (string [] args) {int [] array = {1،2،3} ؛ لـ (int element: array) {system.out.println (element) ؛ }}}2. محسّن لمجموعات اجتياز
Package Cn.Jason01 ؛ import java.util.arraylist ؛ فئة عامة Fortest {public static void main (string [] args) {// inference generic ، يمكنك كتابة أو عدم كتابة سلسلة arraylist <string> array = new ArrayList () ؛ Array.Add ("A") ؛ Array.Add ("B") ؛ Array.Add ("C") ؛ لـ (سلسلة السلسلة: Array) {system.out.println (string) ؛ }}}4. تعزيز المبدأ الأساسي لـ
انظر إلى الكود أولاً
Package Cn.Jason01 ؛ import java.util.arraylist ؛ import java.util.iterator ؛/** * محسّن للمبدأ الأساسي * * Author Cassandra * version 1.1 */فئة عامة Forest {public static void main (string) {// الاستفادة العامة ، يمكنك الكتابة أو لا. بعض المواصفات تحتاج إلى كتابة. ArrayList <string> Array = new ArrayList () ؛ // إضافة element array.add ("a") ؛ array.add ("b") ؛ array.add ("c") ؛ // endance for enderation system.out.println ("---- revated for ----") for (string string) {system.out.println) ؛ IS ، System. لـ (iterator iterator = array.iterator () ؛ iterator.hasNext () ؛ system.out.println (string)) {string = (string) iterator.next () ؛} // iterator is system.out.println ("--------------") ؛ لـ (iterator <string> i = array.iterator () ؛ لـ (int x = 0 ؛ x <array.size () ؛ x ++) {system.out.println (array.get (x)) ؛}}}من الكود أعلاه ، يمكننا أن نرى أن الطبقة الأساسية يتم تنفيذها من قبل المتكررين ، والتعزيز لخفي بالفعل المكرر ، وبالتالي فإن الكود الطبيعي هو أبسط بكثير دون إنشاء المتكررين. هذا هو السبب أيضًا في إطلاق التحسين ، وهو تقليل التعليمات البرمجية ، وتسهيل اجتياز المجموعات والصفائف ، وتحسين الكفاءة.
ملاحظة: نظرًا لأن تعزيز التكرار ، عند استخدام تحسين المجموعات والصفائف ، يجب أولاً تحديد ما إذا كان فارغًا ، وإلا سيتم طرح استثناء مؤشر فارغ. السبب بسيط للغاية. تحتاج الطبقة الأساسية إلى استخدام صفيف أو كائن تجميع للاتصال بطريقة ITerator () لإنشاء Iterator (Iterator Iterator هو واجهة ، لذلك يجب تنفيذها باستخدام فئة فرعية). إذا كان فارغًا ، فسيتم إلقاء استثناء بالتأكيد.
5. تعزيز قابلية تطبيق وقيود لصالح
1. قابلية التطبيق
مناسبة لتجاوز المجموعات والصفائف.
2. القيود:
① لا يمكن أن تكون المجموعة لاغية لأن الطبقة الأساسية هي تكرار.
② يتم إخفاء Iterator ، لذلك لا يمكن تعديل المجموعة (تمت إضافتها وحذفها) عند اجتياز المجموعة.
③cannot مجموعة علامات زاوية.
6. شرح مفصل لاستخدام التعزيز ل
1. الاستخدام المحسن في المصفوفات
package cn.jason05 ؛ import java.util.arraylist ؛ import java.util.list ؛/** * ensusted for use * * author cassandra */public class fordemo {public static void main (string [] args) {// travers the array int [] لـ (int x: arr) {system.out.println (x) ؛ }}}2. تعزيز استخدام في المجموعات
package cn.jason05 ؛ import java.util.arraylist ؛ import java.util.list ؛/** * repared for use * * author cassandra */public class fordemo {public static void main (string [] args) {// traverse the collection arraylist <string> arraylist <string> Array.add ("Hello") ؛ Array.Add ("World") ؛ Array.add ("Java") ؛ لـ (String S: Array) {system.out.println (s) ؛ } // المجموعة فارغة ، قم بإلقاء قائمة استثناء مؤشر NullPointerException Null <String> قائمة = null ؛ if (list! = null) {for (string s: list) {system.out.println (s) ؛ }} // تعزيز إضافة أو تعديل العناصر في ، رمي concurrentModificationException استثناء بشكل متزامن لـ (السلسلة x: array) {if (array.contains ("java)) array.add (1 ،" love ") ؛ }}3. مزيج مثالي من الأدوية والتعزيز ل
ملاحظة: يجب أن يتم دمجها بشكل مثالي مع الأعياد ، وإلا يجب أن تتحول يدويًا لأسفل.
1. لا يوجد تأثير عام ، لا يمكن استخدام تعزيز ل
فصل الطالب
حزمة CN.JASON01 ؛ طالب الطبقة العامة {private string name1 ؛ اسم السلسلة الخاصة 2 ؛ الطالب العام () {super () ؛ } الطالب العام (string name1 ، string name2) {super () ؛ this.name1 = name1 ؛ this.name2 = name2 ؛ } السلسلة العامة getName1 () {return name1 ؛ } public void setName1 (string name1) {this.name1 = name1 ؛ } السلسلة العامة getName2 () {return name2 ؛ } public void setName2 (string name2) {this.name2 = name2 ؛ }}رمز الاختبار
Package Cn.Jason01 ؛ Import java.util.arraylist ؛ import java.util.iterator ؛ import java.util.list ؛ public class test02 {public static void main (string [] args) {// create set 1 list 1 = new ArrayList () ؛ list1.add ("a") ؛ list1.add ("b") ؛ list1.add ("C") ؛ // Create Set 2 list2 = new ArrayList () ؛ list2.add ("D") ؛ list2.add ("e") ؛ list2.add ("f") ؛ // Create Set Three List List3 = New ArrayList () ؛ // اجتياز المجموعات الأولى والثانية وإضافة عناصر لتعيين ثلاثة لـ (ITerator i = list1.iterator () ؛ i.hasNext () ؛) {// system.out.println ( سلسلة s = (سلسلة) i.next () ؛ لـ (iterator j = list2.iterator () ؛ سلسلة ss = (سلسلة) j.next () ؛ list3.add (طالب جديد (S ، SS)) ؛ }} // اجتياز المجموعة الثالثة وإخراج element student st ؛ لـ (iterator k = list3.iterator () ؛ k.hasnext () ؛ system.out .println (new StringBuilder (). append (st.getName1 ()). append (st.getName2 ())))) {st = (الطالب) k.next () ؛ }}}إذا قام الرمز أعلاه بإزالة الخطين من التعليق ، فسيقوم البرنامج بالإبلاغ عن خطأ ، لأن المجموعة لا تعلن نوع العنصر ، ولا يعرف المتكرر بشكل طبيعي نوعه. لذلك إذا لم يكن هناك جيرلات ، فأنت بحاجة إلى تحويل إلى أسفل ، يمكنك فقط استخدام المتكررين ، وليس التحسينات ل.
2. الأدوية والتحسينات ل
تعديل الرمز أعلاه
Package Cn.Jason01 ؛ import java.util.arraylist ؛ import java.util.iterator ؛ import java.util.list ؛/** * تعزيز المزيج المثالي لـ و generics * * * uthor cassandra */public class test03 {public static void main (string) list1.add ("a") ؛ list1.add ("b") ؛ list1.add ("C") ؛ // إنشاء قائمة 2 قائمة <Tring> list2 = new ArrayList <String> () ؛ list2.add ("D") ؛ list2.add ("e") ؛ list2.add ("f") ؛ // إنشاء مجموعة ثلاثة قائمة <Student> list3 = new ArrayList <Tudent> () ؛ ////Traverse المجموعات الأولى والثانية وإضافة عناصر لتعيين ثلاثة لـ (السلسلة S1: list1) {for (String S2: list2) {list3.add (New Student (S1 ، S2)) ؛ }} // Traverse Set Three and Output Elements لـ (Student ST: list3) {system.out.println (new StringBuilder (). append (st.getName1 ()). append (st.GetName2 ())) ؛ }}}4.
هناك طريقة ITerator () في واجهة التجميع ، والتي تُرجع نوع Iterator ولديها Iterator كمؤلف. هناك طريقة ListIratorator () في القائمة ، لذلك هناك قائمة مجموعة إضافية. فئاتها الفرعية LinkedList و ArrayList و Vector جميع واجهات القائمة والتجميع ، حتى تتمكن من استخدام اثنين من التكرار لاجتياز.
اختبار الكود
Package Cn.Jason05 ؛ import java.util.arraylist ؛ import java.util.iterator ؛ import java.util.list ؛ import java.util.listiterator ؛/*** هذه هي أربع طرق لقائمة العبور. * Author Cassandra */Public Class Fordemo01 {Public Static Void Main (String [] args) {// إنشاء قائمة مجموعة <string> قائمة = ArrayList New ArrayList <String> () ؛ list.add ("Hello") ؛ list.add ("World") ؛ list.add ("java") ؛ // method 1 ، Iterator Iterator traversal iterator <string> i = list.iterator () ؛ بينما (i.hasNext ()) {string s = i.next () ؛ system.out.println (s) ؛ }. بينما (lt.hasnext ()) {string ss = lt.next () ؛ System.out.println (SS) ؛ } // الطريقة 3 ، العادية لجمع اجتياز (int x = 0 ؛ x <list.size () ؛ x ++) {string sss = list.get (x) ؛ System.out.println (SSS) ؛ } // method 4 ، endance for traversal collection for (string ssss: list) {system.out.println (sss) ؛ }}}5. طريقة اجتياز جمع الجمع في 2
نظرًا لأن مجموعة SET لا تحتوي على طريقة GET (int index) ، فلا توجد طريقة عادية للحلقة ، فلا توجد طريقة ListIratorator () في المجموعة ، لذلك لا يوجد iTerator ListIrator. لذلك لا يوجد سوى طريقتان لاجتياز.
اختبار الكود
Package Cn.Jason05 ؛ import java.util.hashset ؛ import java.util.iterator ؛ import java.util.set ؛ public class fortest03 {public static void main (string [] args) {set <string> set = new hassset <string> () ؛ set.add ("Hello") ؛ set.add ("العالم") ؛ set.add ("java") ؛ // method 1 ، Iterator Iterator Iterator it = set.iterator () ؛ بينما (it.hasnext ()) {system.out.println (it.next ()) ؛ } // method 2 ، endance for traversal collection for (string s: set) {system.out.println (s) ؛ }}}7. ملخص
1. تعزيز قابلية تطبيق وقيود لصالح
قابلية التطبيق: قابلة للتطبيق على تجاري المجموعات والصفائف.
القيد:
① لا يمكن أن تكون المجموعة لاغية لأن الطبقة الأساسية هي تكرار.
② لا يمكن ضبط علامة الزاوية.
③ يتم إخفاء التكرار ، لذلك لا يمكن تعديل المجموعة (تمت إضافتها وحذفها) عند اجتياز المجموعة.
2. فقط من خلال تعزيز مزيج من و generics في المجموعة يمكن لعب دور الميزات الجديدة.
3. من المهم جدًا عرض الميزات الجديدة للموقع الرسمي. يجب أن تعرف السبب والسبب. فقط من خلال معرفته في قلبك ، يمكنك استخدامه بحرية.
الملخص الأكثر اكتمالا لاستخدام الحلقة FOR في المقالة أعلاه "الميزات الجديدة Java" هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.