개요
Enumeration, Iterator 둘 다 java.util pacakage에 있는 인터페이스이고 컬렉션 객체들의 요소들을 조회할 때 사용합니다. Enumeration과 Iterator의 차이점은 Iterator는 remove()를 제공한다는 것입니다. Enumeration은 legacy이며 Iterator를 쓰는 것이 더 좋습니다.
Iterator와 Enumeration 메소드
Iterator와 Enumeration의 메서드를 표로 알아보겠습니다. 메서드명으로 직관적으로 해석이 되므로 따로 설명을 넣지 않았습니다.
Iterator | Enumeration |
hasNext() | hasMoreElements() |
next() | nextElement() |
remove() | - |
- 과연 어떤 인터페이스를 사용하는 것이 좋을까요?
Methods are provided to enumerate through the elements of a vector, the keys of a hashtable, and the values in a hashtable. Enumerations are also used to specify the input streams to a SequenceInputStream.
NOTE: The functionality of this interface is duplicated by the Iterator interface. In addition, Iterator adds an optional remove operation, and has shorter method names. New implementations should consider using Iterator in preference to Enumeration.
출처 : https://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html
공식 문서에 따르면, enumberate는 hashtable의 키를 기반으로 vector의 요소를 조회합니다. remove() 기능이 있고 메소드 이름이 더 짧은 Iterator를 쓰도록 권고 합니다.
Iterator와 Enumeration의 차이점을 표로 알아보겠습니다.
Iterator | Enumeration |
JDK 1.2에 등장 | JDK 1.0에 등장 |
ArrayList, HashSet, HashMap, LinkedList에 사용 | Vector, Stack, HashTable에 사용(모두 legacy) |
hasNext(), next(), remove() | hasMoreElement(), nextElement() |
fail-fast | fail-safe |
Enumeration보다 보안이 좋다. | fail-safe때문에 보안이 좋지 않다. |
fail-safe하다는 것은 enumeration으로 조회하고 있는 동안에 해당 객체를 변형해도 된다는 의미입니다. 이는 멀티 쓰레드 환경에서 장점을 발휘하기도 하지만, 어디서든 접근이 가능하다는 점에서 보안에 좋지 않을 수 있습니다.
ListIterator
Iterator와 enumberation 이외에 ListIterator가 있습니다. ListIterator는 List + Iterator가 합쳐진 것으로 List에만 사용이 가능합니다. Iterator는 List와 Set에 모두 사용 가능합니다. 정방향 역방향 모두 조회가 가능하며, remove() 이외에도 add()와 set()가 있습니다.
void add(E e) | list에 요소를 추가시킨다. |
boolean hasNext() | 정방향으로 list에 요소가 있으면 true를 반환한다. |
boolean hasPrevious() | 역방향으로 list에 요소가 있으면 true를 반환한다. |
E next() | 다음 요소로 커서를 옮기고 해당 값을 반환한다. |
E nextIndex() | next()로 호출 될 요소의 Index()를 반환한다. |
previous() | 이전 요소로 커서를 옮기고 해당 값을 반환한다. |
previousIndex() | previous()로 호출 될 요소의 Index()를 반환한다. |
remove() | next()나 previous()로 호출 될 요소를 삭제한다. |
set(E e) | next()나 previous()로 호출 될 요소를 e로 교체한다. |
출처
https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html
https://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html
https://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html
'학습' 카테고리의 다른 글
JIT Compiler (0) | 2020.08.16 |
---|---|
Hash 충돌 회피 알고리즘 (0) | 2020.07.24 |
Fail-Fast vs Fail-Safe (0) | 2020.07.23 |
ArrayList & Vector 차이점 (0) | 2020.07.23 |
Compile vs Interpretation (0) | 2020.07.23 |