สวัสดี! ในบทเรียนวันนี้ เราจะพูดถึง Java Iterator ลองนึกภาพว่าคุณไปที่ห้องสมุดและคุณต้องการหาหนังสือเล่มใดเล่มหนึ่ง คุณจะทำอย่างไรมันได้หรือไม่? ถ้าไม่ใช่นิยาย ก็ใช้ระบบทศนิยมดิวอี้ หากเป็นนิยาย จะเรียงตามลำดับตัวอักษรตามนามสกุล สิ่งที่คุณกำลังมองหา ในบางจุด คุณต้องอ่านทีละเล่มจนกว่าคุณจะพบสิ่งที่คุณกำลังมองหา เมื่อใดก็ตามที่คุณมีคอลเล็กชันของสิ่งต่างๆ ใน Java ไม่ว่าจะเก็บไว้ในArray , ArrayList , a QueueหรือListคุณจะหาค่าเฉพาะได้อย่างไร ในบางจุดคุณต้องผ่านแต่ละองค์ประกอบทีละครั้ง นี่คือสิ่งที่ Java iterator มีไว้สำหรับ
Iterator ใน Java คืออะไร
iterator ใน Java คืออะไร? เป็นวิธีการดูแต่ละองค์ประกอบในคอลเลกชัน และโดยการรวบรวม เราหมายถึงอะไรก็ได้ในคลาสคอลเลกชัน ซึ่งรวมถึง:- รายการอาร์เรย์
- ชุดแฮช
- ชุดแฮชที่เชื่อมโยง
- รายการที่เชื่อมโยง
- คิวลำดับความสำคัญ
- เวกเตอร์
- และอื่น ๆ อีกมากมาย…
ทำไมคุณไม่ควรใช้ For Loops เป็น Iterator ใน Java
หนึ่งในวิธีแรกๆ ที่ทุกคนได้รับการสอนให้วนซ้ำผ่านคอลเล็กชันใน Java คือการวนซ้ำ ดูเหมือนว่า:class Main {
public static void main(String[] args) {
int exampleArray[] = new int[10];
//fill array with data
for(int x = 0; x < exampleArray.length; x++) {
System.out.println("Content of element " + x + "is: " + exampleArray[x]);
}
}
}
ผลลัพธ์จะเป็นรายการที่อ่าน:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
สิ่งนี้มีประโยชน์ แต่จะเกิดอะไรขึ้นหากคอลเลกชันไม่เก็บองค์ประกอบในระบบอิงดัชนี ตัวอย่างเช่นSet s จะไม่มีลำดับตามปกติ ดังนั้นจึงแนะนำให้ออกจากการฝึกใช้ for loop เป็น iterator ใน Java และฝึกใช้ คลาส Iterator<E>แทน นี่คือตัวอย่างจาวา iterator
วิธีใช้ Iterator ใน Java
ต่อไปนี้เป็นตัวอย่างวิธีใช้ iterator ใน Java เมื่อใช้คลาส iterator มีสามวิธีในการสำรวจคอลเลกชัน คุณสามารถใช้ลูปwhile()ลู ป for()และลูปforEach() โปรดทราบว่าการวนรอบนี้แตกต่างจากที่เราพูดถึงก่อนหน้านี้ ต่อไปนี้เป็นตัวอย่าง java iterator ที่แตกต่างกันสามตัวอย่าง ขั้นแรก ให้ตั้งค่าคอลเลกชันเพื่อวนซ้ำimport java.util.*; // imports ArrayList, Collection and Iterator
class Main {
public static void main(String[] args) {
Collection<String> example = new ArrayList<String>();
example.add("Item 1");
example.add("Item 2");
example.add("Item 3");
example.add("Item 4");
}
}
นี่เป็นคอลเล็กชัน ง่ายๆ ที่ประกอบด้วยArrayListซึ่งเราโหลดสี่รายการ ทีนี้มาดูสามวิธีในการใช้คลาส Iterator เพื่อสำรวจ ArrayList
ในขณะที่ () วนซ้ำ
Iterator<String> iterator = example.iterator();
while (iterator.hasNext()) {
System.out.println("Element Value= " + iterator.next());
}
ลู ป while() นี้ใช้เมธอด บูลี น .hasNext()ของ คลาส Iteratorเพื่อตรวจสอบว่ามีองค์ประกอบในอนาคตหรือไม่ ถ้าเงื่อนไขเบื้องต้นเป็นจริง ก็จะดำเนินการต่อไป หากคืนค่าเป็นเท็จ การวนซ้ำจะสิ้นสุดลง ส่วนสำคัญในที่นี้คือเมธอด.hasNext()และ.next()ทั้งสองทำการตรวจสอบเบื้องต้นขององค์ประกอบแรก หากคอลเล็กชันว่างเปล่าและไม่มีองค์ประกอบแรก เมธอดจะส่งกลับค่าเท็จสำหรับ . hasNext()และจะโยนNoSuchElementExceptionสำหรับเมธอด .next()
สำหรับลูป
for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
System.out.println("Element Value= " + iterator.next());
}
ดูเหมือนว่าจะเป็นแบบดั้งเดิมมากขึ้นสำหรับการวนซ้ำ มันใช้.hasNext()วิธีการตรวจสอบเงื่อนไขและการเปลี่ยนแปลงส่วน การเริ่มต้นคือการเรียก Iterator
สำหรับ: แต่ละวง
for (String s : example) {
System.out.println("Element Value= " + s);
}
The For:แต่ละลูปคือ for ลูป แต่ถ้าคุณไม่รู้วิธีอ่าน มันอาจจะสับสนเล็กน้อย ไวยากรณ์ของFor:Eachวนซ้ำสำหรับ (data_type variableName : collectionName){ body } สิ่งนี้สำหรับ: แต่ละวงมีข้อเสียสองสามข้อ ประการแรก มันสามารถสำรวจคอลเลกชันได้ในทิศทางเดียวเท่านั้น ประการที่สอง คุณต้องวนซ้ำแต่ละองค์ประกอบ คุณไม่สามารถข้ามรายการใดรายการหนึ่งได้ แต่ในฐานะตัววนซ้ำรายการที่สะดวกใน Java มันเป็นตัวเลือกที่ดีที่สุด ในด้านบวกfor:each loop นั้นอ่านง่ายมาก และเมื่อคุณรู้แล้วก็ยากที่จะเข้าใจผิด หากคุณสงสัยว่าผลลัพธ์ของการวนซ้ำสามลูปคืออะไร พวกมันทั้งหมดจะเหมือนกัน:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4
วิธีใช้ Iterator ใน Java For Maps
แผนที่เป็นวิธีที่ได้รับความนิยมในการจัดเก็บข้อมูล แต่เนื่องจากไม่ขยายCollectionคุณจึงไม่สามารถใช้ตัววนซ้ำก่อนหน้าเพื่อสำรวจแผนที่ได้โดยตรง ดังนั้นคุณจะใช้ iterator ใน Java เพื่อผ่านMap s และHashMap s ได้อย่างไร มีวิธีตัวทำซ้ำแผนที่ Java ที่ดีสี่วิธี เราจะครอบคลุมทีละรายการ ขั้นแรก ให้โหลดแผนที่ด้วยชุดค่าต่างๆimport java.util.*; //imports Map and HashMap
class Main {
public static void main(String[] args) {
Map<String, String> example = new HashMap<String, String>();
example.put("alpha", "one");
example.put("beta", "two");
example.put("gamma", "three");
}
}
วิธี Java Hashmap Iterator: forEach(การกระทำ)
example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
วิธีนี้ใช้นิพจน์แลมบ์ดาเพื่อวนซ้ำ ตัวดำเนินการแลมบ์ดาคือ เมธอด forEach()และเนื้อหาจะพิมพ์ค่าออกมา สิ่งนี้ใช้ตัวดำเนินการหลายพารามิเตอร์ นี่เป็นวิธีที่เร็วและสะอาดที่สุดสำหรับ map iterator ใน Java 8
วิธี Java Hashmap Iterator: For:Each() ลูป
for (Map.Entry<String, String> iterate : example.entrySet()) {
System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
สิ่งนี้ใช้For:Eachไวยากรณ์เพื่อเรียกเมธอดentrySet()เพื่อส่งคืนชุดที่มีคีย์และค่าเป็นองค์ประกอบ นอกจากนี้ เมื่อใช้เมธอด .Entry()ออบเจกต์จะเป็นจริงเฉพาะในขณะที่การวนซ้ำนี้เกิดขึ้น
วิธี Java Hashmap Iterator: Map.Entry<k, v>
Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> element = iterator.next();
System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
วิธีนี้จะแปลงแผนที่เป็นชุดอีกครั้งเพื่อใช้Collections Iterator และเมธอด สำหรับ iterator ทั้ง 3 วิธี ผลตอบแทนจะมีลักษณะดังนี้:
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
System.out.println("Key: " + key);
}
for (String value : example.values()) {
System.out.println("Value: " + value);
}
อันนี้ส่งคืนองค์ประกอบด้วยวิธีอื่น อันดับแรกจะส่งคืนคีย์ทั้งหมดตามลำดับ จากนั้นจึงส่งคืนค่าทั้งหมด:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three