Iterator와 enumerator
자세히 설명하기엔 많은 내용이므로 간단히 설명드리면,
Iterator, Enumeration은 둘다 모두 자바에서 제공하는 컬렉션에 대해 각 컬렉션의 항목들을 순차적으로 접근하는데 사용합니다.
차이점은 Enumeration의 경우 자바의 초기버젼에서 개발되었습니다. 자바는 jdk1.2즉 자바2에서 많은 변화가 생겼는데, 그중에 하나가 컬렉션 클래스(Vector, List, Map, Set...)들을 컬렉션프레임웍 이라는것으로 관리하는것입니다.
이때, 컬렉션프레임웍에서는 Iterator라고 해서, Enumeration의 기능을 확장해서, Collection인터페이스를 상속받은 모든 컬렉션(List, Set, Vector.)에서 Enumeration을 사용가능하게 하였습니다.
정리하면, Enumeration는 자바초기버젼에서 제공되는것으로 Hashtable, Vector 에서 사용가능합니다.
Iterator는 jdk1.2에서 제공되는 것으로 Collection인터페이스를 구현상속한 모든 컬렉션 클래스에서 사용가능합나디.
사용법은 둘다 비슷한데요.
덧붙여서, Iterator는 remove()라는 메소드가 존재하여서, 원본 컬렉션의 항목을 삭제할수 있습니다.
Enumeration
//Enumeration
Vector v = new Vector();
...
Enumeration e = v.elements();
while(e.hasMoreElements())
{
//항목들을 모두 콘솔창에 출력합니다.
System.out.println((String)e.nextElement());
}
//Iterator
HashSet set = new HashSet();
...
Iterator iter = set.iterator();
while (iter.hasNext()) {
i++;
//항목들을 모두 콘솔창에 출력합니다.
System.out.println(i + ":" + iter.next());
}
hasMoreElements() // nextElement()
Enumeration 은 순서를 가지고 있는 배열의 한 종류라고 생각하시면 됩니다..
Enumeration 의 가장 중요한 개념이 커서라는 것입니다..
커서란 현재의 위치를 가리키고 있는 것인데 최초 0부터 시작합니다..
hanMoreElement()는 커서 바로 앞에 데이타가 들어있는지를 체크하는 것입니다..
현재 커서가 0이라면 첫번째칸을 가리키기 때문에 데이타가 하나라도 들어있다면 true를 리턴해 줍니다..
nextElement()는 현재 커서가 가리키고 있는 데이타-객체(Object)-를 리턴해주고 커서의 위치를 다음 칸으로 옮깁니다..
맨처음 nextElement()를 실행하면 값은 첫번째 객체가 리턴되고 실행 후의 커서는 첫번째 데이타를 지나 두번째 데이타가 있는 곳을 가리키게 되죠...
그래서 nextElement() 메소드가 실행한 후 hasNextElement()의 값은 두번째 데이타가 있냐없냐를 따지게 되는 겁니다..