티스토리 뷰
Iterator 란?
- Java의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 한 것
- Collection Framework 란?
- 데이터를 저장하는 클래스들을 표준화 한 설계
- Collections Framework 에는 Set, List, Map 등이 포함
- Set, List 는 Collection 인터페이스를 상속받고 Map 은 그렇지 않음
- Collection Interface
-
- SubInterface
- 대표적으로 Set과 List 등이있으며 이들을 구현한 클래스는 아래와 같음
- HashSet, TreeSet, ArrayList, LinkedList, Vector 등
-
- Iterator Interface method
- Iterator 사용법
- Set이나 List같은 경우에는 인터페이스에 iterator() 메소드가 있으므로 그대로 쓰면된다.
- Map 은 iterator() 메소드가 없으므로 entrySet() 을 통해서 사용할 수 있다(링크참고)
Iterator vs Iterable
- Iterable 이란?
- 해당 인터페이스를 구현하면 객체를 통해 "for-each-loop"를 사용할 수 있다라고 설명하고 있다.
- Java 8 버전부터 추가되었음
- Method
- Iterable forEach 메소드
public class IterableTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("one", 1);
m.put("two", 2);
m.put("three", 3);
Set<String> str = m.keySet();
iterableTest(m);
}
static void iterableTest(Map map) {
Set<Map.Entry<String, Integer>> entries = map.entrySet();
Iterable<Map.Entry<String, Integer>> itr = entries;
itr.forEach(System.out::println);
}
}
- iterator 와 iterable 의 특징
- Iterator
- iterator instance 는 iteration state 를 저장할 수 있다.
- next() 메소드를 통해 현재 element의 상태를 확인할 수 있다.
- 이러한 특징을 통해 각각의 element를 처리할 수 있다.
- remove() 등의 메소드가 있어 element를 삭제할 수 있다.
- ListIterator 를 subinterface로 하기 때문에 앞뒤로 데이터 이동이 가능하다.
- iterator instance 는 iteration state 를 저장할 수 있다.
- Iterable
- iteration 상태를 알 수 없다.
- element 를 삭제할 수 없다.
- 앞뒤로 데이터 이동이 불가능하다.
- 위에서 설명한 iterator 에서 사용할 수 있는 기능을 사용하고자 하면 Iterator 인스턴스를 생성하고 iterator() 메소드를 통해 접근해야 한다.
- Iterator
For-each vs Iterator
- 생각해보면 난 ArrayList를 사용하면서 Iterator 를 통해 구현한 적이 없다. for-each나 for문을 통해 데이터를 가져오는게 익숙하기 때문이다.
- 찾아본 바로는 for-each는 collection을 수정할 수 없고 Iterator는 collection 수정이 가능하니 데이터를 단순히 가져오는 용도라면 for-each를 사용하라고 한다.
- 왜냐면 더 가독성이 좋기때문에
- Iterator는 지우기 가능/for-each는 지우기 불가능
for (String i : list) {
System.out.println(i);
list.remove(i); // throws exception
}
Iterator it=list.iterator();
while (it.hasNext()){
System.out.println(it.next());
it.remove(); // valid here
}
- 가독성 비교
for (String s : stringList) { ... }
for (Iterator<String> iter = stringList.iterator(); iter.hasNext(); ) {
String s = iter.next();
...
}
References
Java api
https://docs.oracle.com/javase/8/docs/api/
java 컬렉션 프레임워크 정리
https://pridiot.tistory.com/63
Iterator와 Iterable 비교
https://www.techiedelight.com/differences-between-iterator-and-iterable-in-java/
For-each와 Iterator 비교
https://stackoverflow.com/questions/18508786/for-each-vs-iterator-which-will-be-the-better-option
'java' 카테고리의 다른 글
[Java] Design Pattern 싱글턴 패턴 (0) | 2020.03.22 |
---|---|
[Java] Design pattern 클래스의 약한 결합, 강한 결합의 이해 (0) | 2020.03.22 |
[Java] Java Design Pattern (0) | 2020.03.22 |
[Java] Map (0) | 2020.03.15 |
[Java] Collections Framework - Set, List (0) | 2020.03.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구조체
- 배열
- C++
- 세마포어
- 클래스
- 교착상태
- C
- dfs
- Java
- 퀵정렬
- BFS
- Stack
- 인접행렬
- javascript
- stackframe
- 병행프로세스
- 운영체제
- 알고리즘
- 재귀함수
- 동적프로그래밍
- 이진탐색
- 소프트웨어
- react
- client side rendering
- 자료구조
- 최단경로
- 입출력장치
- 스텍
- 인접리스트
- server side rendering
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함