개요.
request.getParameterNames().asIterator().
forEachRemaining(paramsname-> System.out.println("paramsname"+paramsname));
위 코드에서 파라미터로 들어온 변수들이 Enumeration 형식으로 받아지고 그 형식을
asiterator()를 사용하여 iterator 형식으로 데이터를 변환을 하는 과정을 보던중
Enumeration과 Iterator가 무엇인지 궁금해짐.
Enumeration과 Iterator가 무엇일까.
공통점
Enumeration, Iterator 둘다 컬렉션의 요소를 반복하는데 사용됩니다.
Enumeration
● 자바 구 버전 부터 있던 인터페이스고, 주요 컬렉션(AllayList등)에 포함이 안되어 있다.
● 요소를 오직 반복하는데만 사용이 되고, 추가, 삽입, 삭제 연산이 안된다.
● hasNext(), hasMoreNext(), asIterator() 세가지 매서드 밖에 지원이 안된다.
("command + y" 로 인터페이스 확인)
● 유연하지 않아서 거의 사용하지 않는다고 한다.
Iterator
● 주요 컬렉션에 포함이 되어 있다.
● Enumeration과 달리 요소를 반복하면서 추가, 삽입, 삭제 연산이 지원이 된다. 이 와 같은 장점으로 인해 Iterator를 사용하는걸 권장한다.
사용법(연습)
사용연습은
1. Collection -> Enumeration -> Iterator
2. Vector -> Enumeration -> Iterator
3. Collection -> Iterator
4. Vector -> Iterator
네가지 케이스에 대해서 연습을 해보았다.
Collection -> Enumeration -> Iterator
System.out.println("Collection으로 생성된 변수를 -> Enumeration, Iterator 타입으로 변환 후 출력");
System.out.println("Iterator 생성시 Collection -> Enumeration -> Iterator 순서로 변환");
List<Integer> collectiontest = new ArrayList<>();
collectiontest.addFirst(11);
collectiontest.addFirst(12);
collectiontest.addFirst(13);
Enumeration<Integer> colenumeration = Collections.enumeration(collectiontest);
Iterator<Integer> coliterator = colenumeration.asIterator();
while(colenumeration.hasMoreElements()){
int value = colenumeration.nextElement();
System.out.println("Collection Enumeration 의 요소 : "+value);
}
while (coliterator.hasNext()){
int value = coliterator.next();
System.out.println("Collection Iterator의 요소 : "+ value);
}
Collection.enumeration(컬렉션 변수 이름) 을 사용하여 Enumeration 타입으로 변환.
Eumeration인터페이스에 있는 asIterator()메서드를 이용하여 Iterator 타입으로 변환.
Vector -> Enumeration -> Iterator
System.out.println("Vector로 생성된 변수를 -> Enumeration -> Iterator 타입으로 변환 후 출력");
Vector<Integer> vectortest = new Vector<>();
vectortest.add(13);
vectortest.add(14);
vectortest.add(15);
Enumeration<Integer> venumeration = vectortest.elements();
Iterator<Integer> viterator = venumeration.asIterator();
while(venumeration.hasMoreElements()){
int value = venumeration.nextElement();
System.out.println("Vector Enumeration 의 요소 : "+value );
}
while (viterator.hasNext()){
int value = viterator.next();
System.out.println("Vector Iterator의 요소 : "+ value);
}
Collection.enumeration() 이 아닌 Vector는 elements()를 사용하면 Enumeration 타입으로 변환이 된다.
asIterator를 사용 해서 Iterator 타입으로 변환하는건 Collection과 동일하다.
Collection -> Iterator
System.out.println("Iterator 생성시 Collection -> Iterator 순서로 변환");
System.out.println("Enumeration 생략 후 바로 Iterator 생성");
List<Integer> testlist = new ArrayList<>();
testlist.add(1);testlist.add(2);testlist.add(3);
Iterator<Integer> testiterator = testlist.iterator();
while(testiterator.hasNext()){
int value = testiterator.next();
System.out.println("Collection -> Iterator 바로 변환 후 출력 : "+ value);
}
Vector -> Iterator
Vector<Integer> testvector= new Vector<>();
testvector.add(1);testvector.add(2);testvector.add(3);
// Iterator<Integer> testiterator2 = testvector.elements().asIterator(); 이렇게 해도 됌
Iterator<Integer> testiterator2 = testvector.iterator();
while (testiterator2.hasNext()){
int value = testiterator2.next();
System.out.println("Vector -> Iterator 바로 변환 후 출력 : "+ value);
}
바로 iterator로 변환하는 방법은 collection에 있는 iterator() 메서드를 사용하면 Iterator 형식으로 손쉽게 변환을해준다.
Enumeration 과 Iterator의 인터페이스
command+y 를 통해 인터페이스를 확인
Enumeration
hasMoreElements(): 열거형에 더 많은 요소가 있는지 여부를 반환합니다.
nextElement(): 열거형에서 다음 요소를 반환합니다.
Iterator
hasNext(): 반복할 요소가 더 있는지 확인합니다.
next(): 다음 요소를 반환합니다. void remove(): 현재 요소를 컬렉션에서 제거합니다. (optional)
forEachRemaining(): 남아있는 요소를 전부 반환을 해줌, while문을 구현을 안해도 됩니다.
주의사항
asIterator()은 Collection에 있는 메서드이다.
command + y로 인터페이스를 확인을 하는 방법을 최근에 알았는데 알고나니 검색하는 시간도 줄고 구조적으로 완벽하게 이해는 하지 못해도 대략 어떻게 동작하는지 알 수 있어서 좋은거 같다.