Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 반복자와 열거의 차이점

<시간/>

Iterator와 Enumeration은 모두 컬렉션의 요소를 탐색하고 액세스하는 커서입니다. 둘 다 컬렉션 프레임워크에 속합니다. 컬렉션 프레임워크의 JDK1.0 버전에서는 열거형이 추가되었고 JDK.1.2 버전에서는 Iterator가 추가되었습니다.

열거형은 컬렉션의 요소에 대한 읽기 전용 액세스 권한이 있기 때문에 컬렉션에서 구조적 변경을 수행할 수 없습니다. 다음과 같은 방법이 있습니다.

  • *hasMoreElements()
  • *nextElement()

반면에 iterator는 컬렉션의 요소를 읽고 제거할 수 있습니다. 다음과 같은 방법이 있습니다 -

  • *hasNext()
  • *next()
  • *remove()
Sr. 아니요. 반복자 열거
1
기본
Iterator에서 컬렉션의 요소를 순회하면서 요소를 읽고 제거할 수 있습니다.
열거를 사용하면 컬렉션의 요소를 순회하는 동안에만 요소를 읽을 수 있습니다.
2.
액세스
컬렉션 프레임워크의 모든 클래스와 함께 사용할 수 있습니다.
Vector 및 HashTable과 같은 컬렉션 프레임워크의 레거시 클래스에서만 사용할 수 있습니다.
3.
빠른 페일 및 페일 세이프
스레드가 컬렉션을 반복하는 동안 컬렉션에서 요소를 제거하는 것과 같은 컬렉션의 모든 변경 사항은 동시 수정 예외를 throw합니다.
열거는 본질적으로 Fail safe입니다. 동시 수정 예외가 발생하지 않습니다.
4.
제한
순방향 반복만 가능
제거 작업은 열거를 사용하여 수행할 수 없습니다.
5.
메소드
다음과 같은 방법이 있습니다 -
*hasNext()
*다음()
*제거하다()
다음과 같은 방법이 있습니다 -
*hasMoreElements()
*다음 요소()

열거의 예

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