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

ความแตกต่างระหว่างตัววนซ้ำและการแจงนับใน Java


ตัววนซ้ำและการแจงนับทั้งคู่เป็นเคอร์เซอร์เพื่อสำรวจและเข้าถึงองค์ประกอบจากคอลเล็กชัน ทั้งคู่อยู่ในกรอบการรวบรวม เพิ่มการแจงนับใน JDK1.0 และ Iterator ในเวอร์ชัน JDK.1.2 ในเฟรมเวิร์กการรวบรวม

การแจงนับไม่สามารถเปลี่ยนแปลงโครงสร้างในคอลเล็กชันได้ เนื่องจากมีสิทธิ์เข้าถึงองค์ประกอบในคอลเล็กชันแบบอ่านอย่างเดียว โดยมีวิธีการดังนี้ :

  • *hasMoreElements()
  • *nextElement()

ในทางกลับกัน ตัววนซ้ำสามารถอ่านและลบองค์ประกอบในคอลเล็กชันได้ โดยมีวิธีการดังต่อไปนี้ -

  • *hasNext()
  • *next()
  • *remove()
ซีเนียร์ เลขที่ คีย์ ตัววนซ้ำ การแจงนับ
1
พื้นฐาน
ใน Iterator เราสามารถอ่านและลบองค์ประกอบในขณะที่สำรวจองค์ประกอบในคอลเล็กชัน
การใช้การแจงนับ เราสามารถอ่านองค์ประกอบระหว่างการสำรวจองค์ประกอบในคอลเล็กชันเท่านั้น
2.
การเข้าถึง
สามารถใช้ได้กับทุกคลาสของเฟรมเวิร์กคอลเล็กชัน
สามารถใช้ได้เฉพาะกับคลาสดั้งเดิมของเฟรมเวิร์กคอลเลกชัน เช่น Vector และ HashTable
3.
Fail-Fast and Fail -Safe
การเปลี่ยนแปลงใดๆ ในคอลเล็กชัน เช่น การลบองค์ประกอบออกจากคอลเล็กชันระหว่างเธรดเป็นการวนซ้ำคอลเล็กชัน จากนั้นจะมีข้อยกเว้นการแก้ไขพร้อมกัน
การแจงนับนั้นล้มเหลวโดยธรรมชาติ ไม่ส่งข้อยกเว้นการดัดแปลงพร้อมกัน
4.
ข้อจำกัด
เฉพาะการวนซ้ำทิศทางไปข้างหน้าเท่านั้น
การดำเนินการลบไม่สามารถทำได้โดยใช้การแจงนับ
5.
วิธีการ
มีวิธีการดังต่อไปนี้ −
*มีถัดไป()
*ต่อไป()
*ลบ()
มีวิธีการดังต่อไปนี้ −
*มีองค์ประกอบเพิ่มเติม()
* ถัดไปองค์ประกอบ ()

ตัวอย่างการแจงนับ

class EnumerationExample {
   public static void main(String args[]) {
      List list = new ArrayList(Arrays.asList( new String[] {"Apple", "Cat", "Dog", "Rat"}));
      Vector v = new Vector(list);
      delete(v, "Dog");
   }
   private static void delete(Vector v, String name) {
      Enumeration e = v.elements();
      while (e.hasMoreElements()) {
         String s = (String) e.nextElement();
         if (s.equals(name)) {
            v.remove(name);
         }
      }
      // Display the names
      System.out.println("The names are:");
      e = v.elements();
      while (e.hasMoreElements()) {
         // Prints elements
         System.out.println(e.nextElement());
      }
   }
}

ตัวอย่างตัววนซ้ำ

class IteratorExample {
   public static void main(String args[]) {
      List list = new ArrayList(Arrays.asList( new String[] {"Apple", "Cat", "Dog", "Rat"}));
      Vector v = new Vector(list);
      delete(v, "Dog");
   }
   private static void delete(Vector v, String name) {
      Iterator i = v.iterator();
      while (i.hasNext()) {
         String s = (String) i.next();
         if (s.equals(name)) {
            i.remove();
         }
      }
      // Display the names
      System.out.println("The names are:");
      i = v.iterator();
      while (i.hasNext()) {
         System.out.println(i.next());
      }
   }
}