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