Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Binary Tree
- Math
- 구현
- implement
- geometry
- two pointers
- bit manipulation
- Data Structure
- string
- Binary Search
- hash table
- Stack
- SQL
- database
- 자바
- Method
- java
- Matrix
- Tree
- Counting
- dynamic programming
- sorting
- 코테
- greedy
- 코딩테스트
- 파이썬
- Number Theory
- array
- Class
- simulation
Archives
- Today
- Total
코린이의 소소한 공부노트
Iterator, ListIterator, Enumeration 인터페이스 본문
[이터레이터, 리스트이터레이터, 이뉴머레이션 인터페이스]
1. 컬렉션에 저장된 데이터를 접근(읽어오기)하는 데 사용되는 인터페이스다.
2. Enumeration은 Iterator의 구버전이고, ListIterator는 Iterator의 접근성을 향상시킨 것이다.(단방향 -> 양방향)
[Iterator 인터페이스의 메서드]
boolean hasNext()
// 읽어 올 요소가 남아있는지 확인한다.
// 있으면 true, 없으면 false를 반환한다.
Object next()
// 다음 요소를 읽어온다.
// hasNext()로 먼저 확인하는 것이 안전하다.
void remove()
// next()로 읽어 온 요소를 삭제한다.
// next()를 호출한 다음 remove()를 호출해야한다.(선택적 기능)
void forEachRemaining(Consumer<? super E> action)
// 컬렉션에 남아있는 요소들에 대해 지정된 작업(action)을 수행한다.
// 람다식을 사용하는 디폴트 메서드
[Enumeration 인터페이스의 메서드]
boolean hasMoreElements()
// 읽어 올 요소가 남아있는지 확인한다.
// 있으면 true, 없으면 false를 반환한다.
// = Iterator의 hasNext()
Object nextElement()
// 다음 요소를 읽어온다.
// hasMoreElements()로 먼저 확인하는 것이 안전하다.
// = Iterator의 next()
[Iterator 사용]
1. 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것이다.
- 컬렉션마다 데이터를 저장한 구조가 다 다르기 때문에 표준화가 필요하다.
2. 컬렉션에 iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용한다.
- iterator()는 Collection 인터페이스에 있다.
3. iterator는 1회용이기 때문에 끝까지 다 읽고 난 후 재사용할 수 없다.
- 다시 iterator()를 호출해서 새 객체를 얻어야 한다.
List list = new ArrayList(); // 다른 컬렉션으로 변경할 때는 이 부분만 수정
// list = {1,2,3}
Iterator it = list.iterator();
while(it.hasNext()) // 읽어 올 요소가 있다면 true, 없다면 false
System.out.println(it.next()); // 다음 요소를 읽어옴
it = list.iterator(); // 이 코드를 생략하면 새 iterator를 받지 않았기 때문에
while(it.hasNext()) // 조건문이 false가 돼서 실행되지 않음
System.out.println(it.next());
4. 코드 변경이 예상될 때는 Iterator를 활용하는 것이 편하다.
List list = new ArrayList();
// list = {1,2,3}
Iterator it = list.iterator();
while(it.hasNext())
System.out.println(it.next());
for(int i=0 ; i<list.size() ; i++)
System.out.println(list.get(i)); // 위의 코드와 같은 동작을 함
---------------------------------------
// 같은 코드를 Collection의 다른 자손인 Set으로 바꿔서 실행시켜보면..
HashSet list = new HashSet();
// list = {1,2,3}
Iterator it = list.iterator();
while(it.hasNext()) // 실행 O
System.out.println(it.next());
for(int i=0 ; i<list.size() ; i++) // 실행 X
System.out.println(list.get(i)); // Set에는 get()이 없음
[Map에는 iterator()가 없다.]
- 요소를 읽어오려면 keySet(), entrySet(), values()를 호출해야 한다.
- 각각의 반환타입이 Set, Set, Collection이므로 여기에 iterator()를 호출해야 한다.
Map m = new HashMap();
// ...
Iterator it = m.entrySet().iterator();
'Java' 카테고리의 다른 글
Comparator, Comparable 인터페이스 (0) | 2022.11.05 |
---|---|
Arrays 클래스 (0) | 2022.11.04 |
스택 클래스와 큐 인터페이스 (0) | 2022.11.02 |
LinkedList 클래스 (0) | 2022.11.02 |
ArrayList 클래스 (0) | 2022.10.27 |