1. ปรับปรุงสำหรับภาพรวม
ปรับปรุงสำหรับลูปหรือที่เรียกว่า foreach loop ใช้ในการสำรวจอาร์เรย์และคอนเทนเนอร์ (คลาสคอลเลกชัน) เมื่อใช้ foreach เพื่อวนผ่านอาร์เรย์และองค์ประกอบการรวบรวมไม่จำเป็นต้องได้รับความยาวอาร์เรย์และการรวบรวมไม่จำเป็นต้องเข้าถึงองค์ประกอบอาร์เรย์และองค์ประกอบการรวบรวมตามดัชนีซึ่งปรับปรุงประสิทธิภาพอย่างมากและรหัสนั้นง่ายกว่ามาก
2. คำอธิบายของเว็บไซต์ทางการของ Oracle
ดังนั้นคุณควรใช้วงสำหรับการทดสอบเมื่อใด ตลอดเวลาที่คุณทำได้ มันสวยงามรหัสของคุณจริงๆ น่าเสียดายที่คุณไม่สามารถใช้งานได้ทุกที่ พิจารณาตัวอย่างเช่นวิธีการกำจัด โปรแกรมต้องการการเข้าถึงตัววนซ้ำเพื่อลบองค์ประกอบปัจจุบัน ลูปสำหรับการเข้าชมจะซ่อนตัวเป็นตัววนซ้ำดังนั้นคุณจึงไม่สามารถโทรออกได้ ดังนั้นลูปสำหรับการสอบใด ๆ จึงไม่สามารถใช้งานได้สำหรับการกรอง ในทำนองเดียวกันมันไม่สามารถใช้งานได้สำหรับลูปที่คุณต้องการแทนที่องค์ประกอบในรายการหรืออาร์เรย์ในขณะที่คุณสำรวจมัน ในที่สุดมันก็ไม่สามารถใช้งานได้สำหรับลูปที่ต้องวนซ้ำหลายคอลเลกชันแบบขนาน ข้อบกพร่องเหล่านี้เป็นที่รู้จักกันโดยนักออกแบบที่ตัดสินใจมีสติไปกับโครงสร้างที่สะอาดและเรียบง่ายซึ่งจะครอบคลุมกรณีส่วนใหญ่
ดังนั้นคุณควรใช้วงสำหรับการทดสอบเมื่อใด ไม่เป็นไรตลอดเวลา สิ่งนี้ทำให้รหัสของคุณสวยงามจริงๆ น่าเสียดายที่คุณไม่สามารถใช้งานได้ทุกที่ พิจารณาสถานการณ์เหล่านี้ตัวอย่างเช่นวิธีการลบ ในการลบองค์ประกอบปัจจุบันโปรแกรมจำเป็นต้องเข้าถึงตัววนซ้ำ การวนรอบสำหรับการทดสอบจะซ่อนตัววนซ้ำดังนั้นคุณจึงไม่สามารถโทรหาฟังก์ชั่นการลบได้ ดังนั้นสำหรับลูปสำหรับการสอบใด ๆ จึงไม่เหมาะสำหรับองค์ประกอบการกรอง นอกจากนี้ลูปที่จำเป็นต้องแทนที่องค์ประกอบเมื่อวนซ้ำผ่านคอลเลกชันหรืออาร์เรย์ไม่สามารถใช้ได้ ในที่สุดมันก็ไม่เหมาะสำหรับการใช้ลูปแบบขนานในการวนซ้ำหลายครั้ง นักออกแบบควรเข้าใจข้อบกพร่องเหล่านี้และออกแบบโครงสร้างที่สะอาดและเรียบง่ายเพื่อหลีกเลี่ยงสถานการณ์เหล่านี้ หากคุณสนใจคุณสามารถดู API ของเว็บไซต์ทางการ หากคุณไม่ทราบวิธีค้นหา API บนเว็บไซต์ทางการโปรดคลิกเพื่อเปิดเว็บไซต์อย่างเป็นทางการเพื่อดูวิธี API
3. ปรับปรุงรูปแบบสำหรับ
สำหรับ (พิมพ์ชื่อตัวแปรของคอลเลกชันหรือองค์ประกอบอาร์เรย์: วัตถุคอลเลกชันหรือวัตถุอาร์เรย์) {คำสั่ง java ที่อ้างอิงชื่อตัวแปร;}เว็บไซต์อย่างเป็นทางการคำอธิบาย:
สำหรับ (Timertask T: C)
T.Cancel ();
เมื่อคุณเห็นลำไส้ใหญ่ (:) อ่านเป็น“ ใน” ลูปด้านบนอ่านว่า“ สำหรับแต่ละ timertask t ใน c” อย่างที่คุณเห็นการสร้างแบบสำหรับการรวมกันอย่างสวยงามกับยาชื่อสามัญ มันรักษาความปลอดภัยทุกประเภทในขณะที่ลบความยุ่งเหยิงที่เหลืออยู่ เนื่องจากคุณไม่จำเป็นต้องประกาศตัววนซ้ำคุณไม่จำเป็นต้องมีการประกาศทั่วไป (คอมไพเลอร์ทำสิ่งนี้เพื่อคุณด้านหลังของคุณ แต่คุณไม่จำเป็นต้องกังวลกับตัวเอง)
ความหมายทั่วไปคือ:
เมื่อคุณเห็นลำไส้ใหญ่ (:) มันอ่าน "เข้ามา" ลูปข้างต้นอ่าน "การเดินทางทุกองค์ประกอบ timertask ในค" อย่างที่คุณเห็นโครงสร้างสำหรับการสอบรวมกันอย่างสมบูรณ์แบบกับยาสามัญ มันยังคงรักษาความปลอดภัยทุกประเภทในขณะที่ขจัดความสับสนที่เหลืออยู่ เนื่องจากคุณไม่จำเป็นต้องประกาศตัววนซ้ำคุณไม่จำเป็นต้องให้คำประกาศทั่วไป (คอมไพเลอร์ทำมันไว้ข้างหลังคุณคุณไม่จำเป็นต้องสนใจมัน)
ประสบการณ์ง่ายๆ:
1. ปรับปรุงสำหรับอาร์เรย์แบบสำรวจ
แพ็คเกจ CN.JASON01; // ปรับปรุงสำหรับ Traversal Array Public Public Class Fortest01 {โมฆะคงที่สาธารณะหลัก (String [] args) {int [] array = {1,2,3}; สำหรับ (int องค์ประกอบ: array) {system.out.println (องค์ประกอบ); -2. ปรับปรุงสำหรับคอลเลกชัน Traversal
แพ็คเกจ cn.jason01; นำเข้า java.util.arraylist; ชั้นเรียนสาธารณะ fortest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// การอนุมานทั่วไปคุณสามารถเขียนหรือไม่เขียนสตริง ArrayList <String> array = new ArrayList (); array.add ("a"); Array.add ("B"); array.add ("C"); สำหรับ (สตริงสตริง: อาร์เรย์) {system.out.println (สตริง); -4. เพิ่มหลักการพื้นฐานของการ
ดูรหัสก่อน
แพ็คเกจ cn.jason01; นำเข้า java.util.arraylist; นำเข้า java.util.iterator;/** * ปรับปรุงสำหรับหลักการพื้นฐาน * * @author Cassandra * @version 1.1 */ชั้นเรียนสาธารณะ จำเป็นต้องเขียนข้อกำหนดบางอย่าง ArrayList <String> array = new ArrayList (); // เพิ่ม Element Array.add ("A"); array.add ("B"); array.add ("C"); // ปรับปรุงสำหรับระบบการใช้งาน คือหลักการการใช้งานพื้นฐาน System.out.println ("--- Reverse Compile ----"); สตริงสตริง; สำหรับ (iterator iterator = array.iterator (); iterator.hasnext (); system.out.println (string)) {string = (string) iterator.next ();} // iterator ใช้ System.out.println ("-----------"); สำหรับ (iterator <string> i = array.iterator (); i.hasnext (); system.out.println (i.next ()))) {} // สามัญสำหรับการใช้งาน System.out.println ("-----------"); สำหรับ (int x = 0; x <array.size (); x ++) {system.out.println (array.get (x));}}}จากรหัสข้างต้นเราจะเห็นว่าเลเยอร์พื้นฐานถูกนำไปใช้โดยตัววนซ้ำและการปรับปรุงสำหรับการซ่อนตัววนซ้ำจริงดังนั้นรหัสธรรมชาติจึงง่ายกว่ามากโดยไม่ต้องสร้างตัววนซ้ำ นี่คือเหตุผลที่เปิดตัวการปรับปรุงซึ่งคือการลดรหัสอำนวยความสะดวกในการรวบรวมคอลเลกชันและอาร์เรย์และปรับปรุงประสิทธิภาพ
หมายเหตุ: เนื่องจากการเพิ่มประสิทธิภาพสำหรับตัววนซ้ำเมื่อใช้การปรับปรุงสำหรับคอลเลกชันและอาร์เรย์ที่ผ่านการสำรวจคุณต้องพิจารณาก่อนว่ามันเป็นโมฆะมิฉะนั้นจะมีข้อยกเว้นตัวชี้โมฆะ เหตุผลนั้นง่ายมาก เลเยอร์พื้นฐานจำเป็นต้องใช้อาร์เรย์หรือวัตถุคอลเลกชันเพื่อเรียกใช้วิธี iterator () เพื่อสร้างตัววนซ้ำ (ตัววนซ้ำตัววนซ้ำเป็นอินเทอร์เฟซดังนั้นจึงจำเป็นต้องนำไปใช้กับคลาสย่อย) หากเป็นโมฆะข้อยกเว้นจะถูกโยนออกไปอย่างแน่นอน
5. เพิ่มการบังคับใช้และข้อ จำกัด ของสำหรับ
1. การบังคับใช้
เหมาะสำหรับการสำรวจของคอลเลกชันและอาร์เรย์
2. ข้อ จำกัด :
①ชุดไม่สามารถเป็นโมฆะได้เนื่องจากเลเยอร์พื้นฐานเป็นตัววนซ้ำ
it ตัววนซ้ำถูกซ่อนไว้ดังนั้นคอลเลกชันไม่สามารถแก้ไขได้ (เพิ่มและลบ) เมื่อข้ามคอลเลกชัน
③ไม่ได้ตั้งค่าเครื่องหมายมุม
6. คำอธิบายโดยละเอียดเกี่ยวกับการใช้การปรับปรุงสำหรับ
1. การใช้งานที่เพิ่มขึ้นสำหรับในอาร์เรย์
แพ็คเกจ cn.jason05; นำเข้า java.util.arraylist; นำเข้า java.util.list;/** * ปรับปรุงสำหรับการใช้งาน * * @author Cassandra */ชั้นเรียนสาธารณะ Fordemo {public Static Main (String [] args) {// สำรวจ array int สำหรับ (int x: arr) {system.out.println (x); -2. เพิ่มการใช้งานในคอลเลกชัน
แพ็คเกจ cn.jason05; นำเข้า java.util.arraylist; นำเข้า java.util.list;/** * ปรับปรุงสำหรับการใช้งาน * * @author Cassandra */คลาสสาธารณะ Fordemo {Public Static Void Main (String [] args) {// array.add ("สวัสดี"); array.add ("โลก"); Array.add ("Java"); สำหรับ (String s: array) {system.out.println (s); } // ชุดเป็น null โยน nullpointerexception รายการข้อยกเว้นตัวชี้ null <string> list = null; if (list! = null) {สำหรับ (String s: list) {system.out.println (s); }} // ปรับปรุงการเพิ่มหรือการปรับเปลี่ยนองค์ประกอบในสำหรับให้โยน concurrentModificationException ข้อยกเว้นที่แก้ไขพร้อมกันสำหรับ (String X: array) {ถ้า (array.contains ("java")) array.add (1, "love"); -3. การผสมผสานที่ลงตัวของยาสามัญและการปรับปรุงสำหรับ
หมายเหตุ: มันจะต้องรวมกันอย่างสมบูรณ์แบบกับยาชื่อสามัญมิฉะนั้นคุณจะต้องแปลงลงด้วยตนเอง
1. ไม่มีเอฟเฟกต์ทั่วไปไม่สามารถใช้การปรับปรุงได้สำหรับ
ชั้นเรียน
แพ็คเกจ cn.jason01; นักเรียนชั้นเรียนสาธารณะ {สตริงส่วนตัวชื่อ 1; สตริงส่วนตัวชื่อ 2; นักเรียนสาธารณะ () {super (); } นักเรียนสาธารณะ (สตริงชื่อ 1, สตริงชื่อ 2) {super (); this.name1 = name1; this.name2 = name2; } สตริงสาธารณะ getName1 () {return name1; } โมฆะสาธารณะ setName1 (สตริงชื่อ 1) {this.name1 = name1; } สตริงสาธารณะ getName2 () {return name2; } โมฆะสาธารณะ setName2 (สตริงชื่อ 2) {this.name2 = name2; -รหัสทดสอบ
แพ็คเกจ cn.jason01; นำเข้า java.util.arraylist; นำเข้า java.util.iterator; นำเข้า java.util.list; คลาสสาธารณะ test02 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// สร้างชุด 1 รายการ 1 = ใหม่ ArrayList (); List1.add ("A"); List1.add ("B"); List1.add ("C"); // สร้างชุด 2 list 2 = new ArrayList (); list2.add ("D"); list2.add ("E"); list2.add ("f"); // สร้างชุดรายการสามรายการ 3 = new ArrayList (); // Traverse ชุดแรกและชุดที่สองและเพิ่มองค์ประกอบเพื่อตั้งค่าสามสำหรับ (iterator i = list1.iterator (); i.hasnext ();) {// system.out.println (i.next ()); สตริง s = (สตริง) i.next (); สำหรับ (iterator j = list2.iterator (); j.hasnext ();) {// list2.add (นักเรียนใหม่ (s, j.next ())); สตริง ss = (สตริง) j.next (); List3.Add (นักเรียนใหม่ (S, SS)); }} // Traverse ชุดที่สามและส่งออก Element Student ST; สำหรับ (iterator k = list3.iterator (); k.hasnext (); system.out .println (สตริงใหม่ (). ผนวก (st.getName1 ()). ผนวก (st.getName2 ()))) {st = (นักเรียน) k.next (); -หากรหัสข้างต้นลบสองบรรทัดของความคิดเห็นโปรแกรมจะรายงานข้อผิดพลาดเนื่องจากคอลเลกชันไม่ได้ประกาศว่าประเภทขององค์ประกอบคืออะไรและตัววนซ้ำตามธรรมชาติไม่ทราบว่ามันคือประเภทใด ดังนั้นหากไม่มียาสามัญคุณต้องแปลงลงคุณสามารถใช้ตัววนซ้ำได้เท่านั้นไม่ใช่การปรับปรุง
2. ยาสามัญและการปรับปรุงสำหรับ
แก้ไขรหัสด้านบน
แพ็คเกจ cn.jason01; นำเข้า java.util.arraylist; นำเข้า java.util.iterator; นำเข้า java.util.list;/** * เพิ่มการผสมผสานที่สมบูรณ์แบบของสำหรับและทั่วไป * * @author cassandra */คลาสสาธารณะ test03 List1.add ("A"); List1.add ("B"); List1.add ("C"); // สร้าง Set 2 list <string> list2 = new ArrayList <String> (); list2.add ("D"); list2.add ("E"); list2.add ("f"); // สร้างชุดสามรายการ <student> list3 = new ArrayList <Tudent> (); //// traverse ชุดแรกและสองและเพิ่มองค์ประกอบเพื่อตั้งค่าสามสำหรับ (String S1: list1) {สำหรับ (String S2: list2) {list3.Add (นักเรียนใหม่ (S1, S2)); }} // Traverse ชุดสามและองค์ประกอบเอาท์พุทสำหรับ (นักเรียน ST: list3) {system.out.println (สตริงใหม่ (). ผนวก (st.getName1 ()). ภาคผนวก (st.getName2 ())); -4. สี่วิธีการผ่านรายการรวบรวมรายการ
มีเมธอดตัววนซ้ำ () ในอินเทอร์เฟซคอลเลกชันซึ่งส่งคืนประเภทตัววนซ้ำและมีตัววนซ้ำเป็นตัววนซ้ำ มีเมธอด listiterator () ในรายการดังนั้นจึงมีผู้จัดเก็บรายการเพิ่มเติม subclasses linkedList, ArrayList และ Vector ทั้งหมดใช้งานรายการและอินเทอร์เฟซการรวบรวมเพื่อให้คุณสามารถใช้ตัววนซ้ำสองตัวเพื่อสำรวจ
การทดสอบรหัส
แพ็คเกจ cn.jason05; นำเข้า java.util.arraylist; นำเข้า java.util.iterator; นำเข้า java.util.list; นำเข้า java.util.listiterator;/*** นี่เป็นสี่วิธีของรายการข้าม * @author Cassandra */คลาสสาธารณะ FORDEMO01 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// สร้างรายการคอลเลกชัน <string> list = new ArrayList <String> (); list.add ("สวัสดี"); list.add ("โลก"); list.add ("java"); // วิธีที่ 1, Iterator Iterator Traversal Iterator <String> i = list.iterator (); ในขณะที่ (i.hasnext ()) {string s = i.next (); System.out.println (s); } // วิธีที่ 2, listiterator iterator traversal collection listiterator <String> lt = list.listiterator (); ในขณะที่ (lt.hasnext ()) {string ss = lt.next (); System.out.println (SS); } // วิธีที่ 3, สามัญสำหรับการรวบรวม traversal สำหรับ (int x = 0; x <list.size (); x ++) {string sss = list.get (x); System.out.println (SSS); } // วิธีที่ 4, ปรับปรุงสำหรับการรวบรวม Traversal สำหรับ (String SSSS: รายการ) {System.out.println (SSS); -5.Set Collection Traversal Method ใน 2
เนื่องจากคอลเลกชันชุดไม่มีวิธีการรับ (INT ดัชนี) จึงไม่มีวิธีการวนซ้ำจึงไม่มีเมธอด listiterator () ในชุดดังนั้นจึงไม่มีตัวทำรายการ listiterator ดังนั้นจึงมีเพียงสองวิธีในการสำรวจ
การทดสอบรหัส
แพ็คเกจ cn.jason05; นำเข้า java.util.hashset; นำเข้า java.util.iterator; นำเข้า java.util.set; คลาสสาธารณะ Fortest03 {โมฆะสาธารณะคง set.add ("สวัสดี"); set.add ("โลก"); set.add ("java"); // วิธีที่ 1, Iterator Iterator Iterator it = set.iterator (); ในขณะที่ (it.hasnext ()) {system.out.println (it.next ()); } // วิธีที่ 2, ปรับปรุงสำหรับการรวบรวม traversal สำหรับ (สตริง s: set) {system.out.println (s); -7. สรุป
1. เพิ่มการบังคับใช้และข้อ จำกัด ของสำหรับ
การบังคับใช้: ใช้ได้กับการสำรวจของคอลเลกชันและอาร์เรย์
ข้อ จำกัด :
①ชุดไม่สามารถเป็นโมฆะได้เนื่องจากเลเยอร์พื้นฐานเป็นตัววนซ้ำ
②ไม่สามารถตั้งค่าเครื่องหมายมุมได้
iterator ถูกซ่อนอยู่ดังนั้นคอลเลกชันไม่สามารถแก้ไขได้ (เพิ่มและลบ) เมื่อข้ามคอลเลกชัน
2. โดยการเพิ่มการผสมผสานของสำหรับและทั่วไปในคอลเลกชันสามารถเล่นบทบาทของคุณสมบัติใหม่ได้
3. เป็นสิ่งสำคัญมากที่จะดูคุณสมบัติใหม่ของเว็บไซต์ทางการ คุณต้องรู้เหตุผลและเหตุผล โดยการรู้ในใจคุณสามารถใช้มันได้อย่างอิสระ
บทสรุปที่สมบูรณ์ที่สุดของการใช้งานของ For Loop ในบทความข้างต้น "Java New Feature" คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น