[Java] 3. Iterator
글 작성자: SeoArc
Iterator?
Iterator는 컬렉션에 저장된 요소에 접근하는데 사용되는 인터페이스이다.
Iterator의 구버전으로 Enumeration이 있고, 기능을 향상 시킨 ListIterator가 있다.
iterator()는 Collection 인터페이스에 정의된 메서드이므로 List와 Set에도 포함되어 있다.
Map Iterator 처리
Map 인터페이스를 구현한 컬렉션 클래스는 key와 value를 쌍으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없다. 대신 keySet()이나 entrySet()과 같은 메서드를 통해서 key와 value를 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 Iterator를 얻을 수 있다.
Iterator it = map.entrySet().iterator();
Iterator 메서드
메서드 | 설명 |
boolean hasNext() | 읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false |
Object next() | 다음 요소를 읽어온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 좋다. |
void remove() | next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야한다. |
Enumeration & ListIterator
- Enumeration: Iterator의 구버전
- Enumeration은 Collection Framework가 만들어지기 전에 사용하던 것으로, 이전 버전으로 작성된 소스와의 호환을 위해서 남겨 두고 있다. 따라서 웬만하면 Enumeration 대신 Iterator를 사용하는 것이 좋다.
- ListIterator: Iterator에 양방향 조회기능추가(List를 구현한 경우만 사용가능)
- ListIterator는 Iterator를 상속받아서 기능을 추가한 것으로, 컬렉션의 요소에 접근할 때 양방향으로의 이동이 가능하다.
- ArrayList나 LinkedList와 같이 List인터페이스를 구현한 컬렉션에서만 사용할 수 있다.
ListIterator 메서드
메서드 | 설명 |
void add(Object o) | 컬렉션에 새로운 객체(o)를 추가한다. |
boolean hasNext() | 읽어 올 다음 요소가 남아있는지 확인한다. 있으면 true, 없으면 false |
boolean hasPrevious() | 읽어 올 이전 요소가 남아있는지 확인한다. 있으면 true, 없으면 false |
Object next() | 다음 요소를 읽어온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 좋다. |
Object previous() | 이전 요소를 읽어온다. previous()를 호출하기 전에 hasPrevious()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 좋다. |
int nextIndex() | 다음 요소의 index를 반환한다. |
int previousIndex() | 이전 요소의 index를 반환한다. |
void remove() | next() 또는 previous()로 읽어 온 요소를 삭제한다. 반드시 next()나 previous()를 먼저 호출한 다음에 이 메서드를 호출해야한다. |
void set(Object o) | next() 또는 previous()로 읽어 온 요소를 지정된 객체(o)로 변경한다. 반드시 next()나 previous()를 먼저 호출한 다음에 이 메서드를 호출해야한다. |
'Language > Java' 카테고리의 다른 글
[Java] 아무 생각 없이 생성했는데 동일한 객체? (0) | 2023.03.09 |
---|---|
[Java] abstract class vs interface (0) | 2023.01.20 |
[Java] stream vs for (1) | 2023.01.17 |
[Java] 2. List (0) | 2022.08.12 |
[Java] 1. Collections Framework (0) | 2022.08.11 |
댓글
이 글 공유하기
다른 글
-
[Java] abstract class vs interface
[Java] abstract class vs interface
2023.01.20 -
[Java] stream vs for
[Java] stream vs for
2023.01.17 -
[Java] 2. List
[Java] 2. List
2022.08.12 -
[Java] 1. Collections Framework
[Java] 1. Collections Framework
2022.08.11