John Squirrels
ระดับ
San Francisco

Java Iterator

เผยแพร่ในกลุ่ม
สวัสดี! ในบทเรียนวันนี้ เราจะพูดถึง Java Iterator ลองนึกภาพว่าคุณไปที่ห้องสมุดและคุณต้องการหาหนังสือเล่มใดเล่มหนึ่ง คุณจะทำอย่างไรมันได้หรือไม่? ถ้าไม่ใช่นิยาย ก็ใช้ระบบทศนิยมดิวอี้ หากเป็นนิยาย จะเรียงตามลำดับตัวอักษรตามนามสกุล สิ่งที่คุณกำลังมองหา ในบางจุด คุณต้องอ่านทีละเล่มจนกว่าคุณจะพบสิ่งที่คุณกำลังมองหา เมื่อใดก็ตามที่คุณมีคอลเล็กชันของสิ่งต่างๆ ใน ​​Java ไม่ว่าจะเก็บไว้ในArray , ArrayList , a QueueหรือListคุณจะหาค่าเฉพาะได้อย่างไร ในบางจุดคุณต้องผ่านแต่ละองค์ประกอบทีละครั้ง นี่คือสิ่งที่ Java iterator มีไว้สำหรับวิธีใช้ Java Iterator: บทช่วยสอนโดยย่อ - 1

Iterator ใน Java คืออะไร

iterator ใน Java คืออะไร? เป็นวิธีการดูแต่ละองค์ประกอบในคอลเลกชัน และโดยการรวบรวม เราหมายถึงอะไรก็ได้ในคลาสคอลเลกชัน ซึ่งรวมถึง:
  • รายการอาร์เรย์
  • ชุดแฮช
  • ชุดแฮชที่เชื่อมโยง
  • รายการที่เชื่อมโยง
  • คิวลำดับความสำคัญ
  • เวกเตอร์
  • และอื่น ๆ อีกมากมาย…
นอกจากนี้ยังมีอินเทอร์เฟซต่างๆ สำหรับคลาสเหล่านั้น เช่นSet , List , Queue , DequeueและSorted Setเป็นต้น Iterator<E>เป็นเมธอดอินเตอร์เฟสสาธารณะของคลาส Interface Iterator<E> มันถูกนำมาใช้ใน Java 1.2 และแทนที่การแจงนับเป็นวิธีการตรวจสอบองค์ประกอบตามลำดับในคอลเลกชัน

ทำไมคุณไม่ควรใช้ 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
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION