콜렉션 프레임워크(Queue, Set, List)는 그리고 Map은 배열의 한계성을 극복하기 위해 나왔다.
기본적인 사용법은 가장 최상위 인터페이스인 Collections에 구현되어 있는 것들을 모두 살펴보는 편이 좋다.
그 중에 Iterator를 살펴보자면...
콜렉션프레임워크에서 데이터를 하나하나씩 뺴서 처리할 일이 있으면 Iterator 클래스를 사용해주는 게 좋다. 가장 최상위 인터페이스인 콜렉션 인터페이스에 그런 동작을 해주는 Iterator 라는 클래스가 구현되어 있기 때문이다.
Iterator에서 알아두어야 할 핵심 메소드는 아래 두가지이다.
hasNext();
next();
HashSet<Integer> A = new HashSet<Integer>();
A.add(1);
A.add(2);
A.add(3);
Iterator hi = A.iterator();
while(hi.hasNext()){
System.out.println(hi.next());
}
hi
에 A
의 element들이 모두 들어간다hasNext()
는 hi에 element가 있는지 체크한다. 있으면 true 없으면 falsehi.next()
는 hi에 있는 elemet 중 하나를 꺼내서 반환하고 꺼낸 것은 지운다.hi
에 담긴 A
의 element 들이 지워진다는 이야기이지, A
의 element가 지워진다는 이야기는 아니다.질문1: Iterator hi = A.iterator(); 이해가 안감.
Collection 인터페이스에 구현되도록 되어있는 iterator()를, Set이 iterator()를 쓰면 단 한번의 메소드 실행으로 모든 element가 Iterator데이터타입의 hi로 모두 들어가는건가?
질문2: HashSet을 ArrayList로 바꾸면
HashSet을 ArrayList로 바꾸면 그대로 1,2,3이 출력된다. 둘다 Collection을 최상위 인터페이스로 가지고 있기 때문이다.
이렇게 바꾸면Iterator hi
는 어떤식으로 구성될까?
ArrayList이냐 HashMap이냐에 따라서hi
도 내부적으로 자료형식이 다르게 저장되어있을까?
키워드
공부해보야할거
Iterator VS for VS foreach
https://stackoverflow.com/questions/22267919/iterator-vs-for