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