อินเทอร์เฟซตัววนซ้ำ
1. อินเทอร์เฟซตัววนซ้ำ
ทำซ้ำได้
วิธีการในตัว iterator () ส่งคืนตัววนซ้ำที่สร้างขึ้นใหม่
ชอบ:
อินเทอร์เฟซสาธารณะ iterable {iterator iterator (); - ตัววนซ้ำมีสองวิธี: hasnext () และถัดไป () เพื่อนำไปใช้ Iterator ส่วนต่อประสานสาธารณะ {Boolean Hasnext (); รายการถัดไป (); โมฆะลบ (); // การใช้งานเสริม}
2. ใช้การนำเข้า
นำเข้า java.util.iterator;
คลาสทั่วไปใช้อินเทอร์เฟซแบบ iterable ใช้ iterable <ition>
ใช้เมธอด Iterator () ของ Iterable ของ Iterable เพื่อส่งคืนประเภทตัววนซ้ำที่กำหนดไว้
DEFINE ITERATOR TYPE ใช้ ITERATOR <ITEM>
ใช้ hasnext (), next () และลบ ()
3. ตัวอย่าง:
สแต็คคลาสสาธารณะ <ite> ใช้ iterable <ite> {public iterator <ite> iterator () {ส่งคืน listiterator ใหม่ <item> (อันดับแรก); } คลาสส่วนตัว listiterator <ite> ใช้ iterator <ite> {โหนดส่วนตัว <itect> ปัจจุบัน; public listiterator (โหนด <ite> อันดับแรก) {current = first; } บูลีนสาธารณะ hasnext () {return current! = null; } โมฆะสาธารณะลบ () {โยน unsupportedoperationException ใหม่ (); } รายการสาธารณะถัดไป () {ถ้า (! hasnext ()) โยน nosuchelementException ใหม่ (); รายการรายการ = current.item; current = current.next; รายการส่งคืน; - 4. วิธีการโทร
การทำซ้ำ foreach
สำหรับ (String s: stack) system.out.println (s);
หากเป็นประเภทพื้นฐานเช่น int/double โปรดใช้ความสัมพันธ์การแปลงก่อนหน้านี้
5. วนรอบการสำรวจ
ตัววนซ้ำ i = stack.iterator (); ในขณะที่ (i.hasnext ()) {string s = i.next (); -อินเทอร์เฟซการแจงนับ
การแจงนับเป็นคลาสอินเตอร์เฟสใน java.util ในการแจงนับมันห่อหุ้มวิธีการเกี่ยวกับการแจกแจงชุดข้อมูล มันคล้ายกับตัววนซ้ำ มันถูกใช้เพื่อสำรวจองค์ประกอบในคอลเลกชัน อย่างไรก็ตามการแจงนับการแจงนับเฉพาะจะให้ฟังก์ชั่นขององค์ประกอบการสำรวจของเวกเตอร์และคอลเลกชันประเภทแฮช วัตถุคอลเลกชันประเภทนี้ได้รับวัตถุการแจงนับโดยเรียกเมธอดองค์ประกอบ () จากนั้นเรียกใช้วิธีการต่อไปนี้เพื่อสำรวจองค์ประกอบในคอลเลกชัน
HasmoreElements (): กำหนดว่ายังมีข้อมูลในวัตถุการแจงนับ
NextElement (): รับข้อมูลถัดไปในวัตถุการแจงนับ
ตัวอย่างมีดังนี้:
การแจงนับ req = request.getParameterNames (); ในขณะที่ (req.hasmoreElements ()) {object obj = (วัตถุ) req.nextelement (); if (obj.toString (). trim (). เท่ากับ ("lastPage")) {system.out.println ("lastPage /n"); } อื่นถ้า (obj.toString (). trim (). เท่ากับ ("NextPage")) {System.out.println ("NextPage"); - ความแตกต่างระหว่างตัววนซ้ำและการแจงนับ
ในคอลเลกชัน Java เรามักจะสำรวจคอลเลกชันผ่าน "ตัววนซ้ำ" หรือ "คลาสการแจงนับ" วันนี้มาเรียนรู้เกี่ยวกับความแตกต่างระหว่างพวกเขาด้วยกัน
ก่อนอื่นให้ดูที่ซอร์สโค้ดของการแจงนับ java และ iterator.java แล้วพูดคุยเกี่ยวกับความแตกต่างของพวกเขา
การแจงนับเป็นอินเทอร์เฟซและซอร์สโค้ดมีดังนี้:
แพ็คเกจ java.util; การแจกแจงส่วนต่อประสานสาธารณะ <E> {บูลีน HasmoreElements (); e NextElement ();} Iterator ยังเป็นอินเทอร์เฟซและซอร์สโค้ดมีดังนี้:
แพ็คเกจ java.util; อินเตอร์เฟส public iterator <e> {boolean hasnext (); e next (); โมฆะลบ ();} หลังจากอ่านรหัสให้พูดคุยเกี่ยวกับความแตกต่างระหว่างพวกเขา
(01) อินเทอร์เฟซฟังก์ชั่นที่แตกต่างกัน
การแจงนับมีเพียง 2 ฟังก์ชั่นอินเทอร์เฟซ ผ่านการแจงนับเราสามารถอ่านข้อมูลของคอลเลกชันได้เท่านั้น แต่ไม่สามารถแก้ไขข้อมูลได้
Iterator มีอินเตอร์เฟสฟังก์ชั่นเพียง 3 ตัวเท่านั้น นอกเหนือจากการอ่านข้อมูลของคอลเลกชันแล้วตัววนซ้ำยังสามารถลบข้อมูลได้
(02) Iterator รองรับกลไกที่ล้มเหลวอย่างรวดเร็ว แต่การแจงนับไม่ได้
การแจงนับเป็นอินเทอร์เฟซที่เพิ่มโดย JDK 1.0 ฟังก์ชั่นที่ใช้ ได้แก่ เวกเตอร์แฮชต์และคลาสอื่น ๆ ซึ่งทั้งหมดถูกเพิ่มเข้ามาใน JDK 1.0 จุดประสงค์ของการแจงนับคือการจัดให้มีอินเทอร์เฟซแบบสำรวจ การแจงนับเองไม่รองรับการซิงโครไนซ์ แต่เมื่อเวกเตอร์และแฮชแต้มใช้การแจงนับการซิงโครไนซ์จะถูกเพิ่มเข้ามา
Iterator เป็นอินเทอร์เฟซที่เพิ่มใน JDK 1.2 เท่านั้น นอกจากนี้ยังมีอินเทอร์เฟซ Traversal สำหรับคอลเลกชันเช่น HashMap และ ArrayList Iterator รองรับกลไกที่ล้มเหลวอย่างรวดเร็ว: เมื่อหลายเธรดทำงานบนเนื้อหาของคอลเลกชันเดียวกันอาจมีการสร้างเหตุการณ์ที่ล้มเหลวอย่างรวดเร็ว