[Java] Iterator에 대해

김동욱·2023년 8월 25일
0

Java

목록 보기
5/8
post-thumbnail

Iterator란?

개발자가 컬렉션에 저장되어 있는 요소들, 특히 리스트에 접근하는데 사용되는 인터페이스입니다.

  • Collection이란 자바에서 제공하는 자료구조들의 인터페이스로 List, ArrayList, set,Queue, LinkedList가 이를 상속받고 있습니다.

쉽게 말해 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화 한 것입니다.
list, set 등등 모두 저장된 방식이 다릅니다. 배열형식, 트리형식, 맵형식..
이 저장된 요소를 표준화해서 읽어올 수 있도록 한 것입니다.
Enumeration은 Iterator의 이전 버전입니다.

메소드

boolean hasNext(); : 읽어 올 요소가 남아있는지 확인합니다. True or False

Object next(); : 다음 요소를 읽어옵니다. hasNext()로 먼저 확인하는 게 안전합니다

void remove() : next()로 읽어 온 요소를 삭제한다. next()가 우선되야한다

Listiteratior : 양방향 접근이 가능한 Iteratior

단점

값을 변경하거나 추가가 불가능하고
대량의 데이터를 제어할 때 속도가 느립니다.

코드로 보는 예시

List list =new ArrayList(); //다른 컬렉션을 사용할 땐 이 부분을 교체
Collection c = new Hashset();
Collection c = new Treeset();

위에서 Collection 참조변수 c의 객체를 변경했다고 치자.
만약 참조변수가 Hashset이거나 treeset이였으면 아래 모든 코드들을 확인해줘야한다.
왜냐면 사용하는 멤버가 다르기 때문이다.(멤버변수나 메소드가 다름)
하지만 참조변수를 Colletcion 으로 맞춰주면 같은 멤버를 사용하는 변수, 즉 리모콘이 같고 가리키는 객체만 바뀌기 때문에 편하게 변경이 가능하다. (어차피 리모콘에 있는 멤버만 사용이 가능하기때문)

다시 말해서 내가 Treeset의 객체를 사용할건데 Treeset의 모든 속성과 메소드를 사용하지않고,
조상인 Collection에 있는 변수와 메소드만 사용할 것 같으면 위처럼 다형성을 사용해주는 게 유연한 코드.

Iterator it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}

iterator는 일종의 포인터처럼 리스트의 변수를 가리키고 hasNext()를 파악하고
그래서 똑같은 while문으로 한번 더 구하려고 하면 이미 마지막 변수까지 확인했으니
false 가 나오게된다. 즉 일회용이다. 이런 경우엔 한번 더 객체를 불러줘야 한다.

it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}

이렇게 for문으로 해도 되는데 이러면 위의 컬렉션(Hashset,map 등등..)을 바꾸게 될 경우 동작하지않는다.
쉽게 예를 들어 Hashset은 get메소드가 없기때문

for(int i =0; list.size();i++){
Object obj = list.get(i);
sout(obj);
}

Map과 iterator

map은 Collection의 자손이 아니기 떄문에
keySet(), entrySet(), values()를 우선 호출하고 iterator() 를 사용해야 합니다.

Map map = new HashMap();

entry 란 (key, value)의 한 쌍

Iterator it = map.entrySet().iterator();

위 코드를 풀어쓰면 다음과 같다.

Set set = map.entrySet();
Iterator it = set.iterator();
profile
안녕하세요. 공부해요

0개의 댓글