Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

มีกี่วิธีในการ Retrieve ข้อมูลจาก Collection ใน Java?

มีหลักๆ 3 วิธี ในการเข้าถึง Element ทั้งหมดใน Collection

1. Enhanced For Loop (For-Each) - ง่ายที่สุด

List<String> list = Arrays.asList("Java", "Python", "Go");
for (String s : list) {
    System.out.println(s);
}

2. Iterator / ListIterator - ควบคุมได้ละเอียด

  • Iterator - เดินหน้าได้อย่างเดียว (hasNext(), next(), remove())
  • ListIterator - เดิน 2 ทิศทาง (hasPrevious(), previous(), add(), set())
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));

// Iterator (Forward only)
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

// ListIterator (Bidirectional)
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) lit.next(); // เดินไปจนสุด
while (lit.hasPrevious()) {
    System.out.println(lit.previous()); // ย้อนกลับ
}

3. Enumeration - Legacy (Vector, Hashtable)

Interface เก่า ใช้กับ Vector, Hashtable เท่านั้น

Vector<Integer> vec = new Vector<>(Arrays.asList(1,2,3));
Enumeration<Integer> en = vec.elements();
while (en.hasMoreElements()) {
    System.out.println(en.nextElement());
}

วิธีเพิ่มเติม (Modern Java)

4. forEach() Method (Java 8+)

list.forEach(System.out::println);
// หรือ
list.forEach(s -> System.out.println(s));

5. Stream API (Java 8+)

list.stream().forEach(System.out::println);
// รองรับ Parallel: list.parallelStream().forEach(...)

ตารางเปรียบเทียบ

วิธี ทิศทาง แก้ไขระหว่าง Iterate รองรับ
For-Each Forward ไม่ได้ (ConcurrentModificationException) ทุก Collection
Iterator Forward ได้ (ผ่าน it.remove()) ทุก Collection
ListIterator Forward/Backward ได้ (add, set, remove) List เท่านั้น
Enumeration Forward ไม่ได้ Vector, Hashtable (Legacy)
forEach() / Stream Forward ไม่ได้ (Structural Modification) ทุก Collection

แนวทางเลือก

  • อ่านอย่างเดียว -> For-Each หรือ forEach()
  • ต้อง Remove ระหว่าง Loop -> Iterator.remove()
  • ต้องเดินย้อนหลังหรือ Add/Set -> ListIterator
  • ต้อง Filter/Map/Reduce -> Stream API