Java中迭代器和列舉的區別


迭代器和列舉都是用於遍歷和訪問集合中元素的遊標。它們都屬於集合框架。列舉在 JDK 1.0 中新增,迭代器在 JDK 1.2 版本的集合框架中新增。

列舉無法對集合進行結構性更改,因為它只能只讀訪問集合中的元素。它具有以下方法:

  • *hasMoreElements()
  • *nextElement()

另一方面,迭代器可以讀取和刪除集合中的元素。它具有以下方法:

  • *hasNext()
  • *next()
  • *remove()
序號關鍵點迭代器列舉
1
基礎
在迭代器中,我們可以在遍歷集合中的元素時讀取和刪除元素。
使用列舉,我們只能在遍歷集合中的元素時讀取元素。
2.
訪問
它可以用於集合框架的任何類。
它只能用於集合框架的遺留類,例如 Vector 和 HashTable。
3.
快速失敗和安全失敗
集合中的任何更改,例如在某個執行緒迭代集合期間從集合中刪除元素,都會引發併發修改異常。
列舉本質上是安全失敗的。它不會引發併發修改異常。
4.
限制
只能向前迭代。
無法使用列舉執行刪除操作。
5.
方法
它具有以下方法:
*hasNext()
*next()
*remove()
它具有以下方法:
*hasMoreElements()
*nextElement()

列舉示例

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());
      }
   }
}

更新於:2019年11月18日

7000+ 瀏覽量

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告