Computer Science/DataStructure

Iterator

자바의정석 3rd Edition 2권을 참조하였습니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76083001 

 

Java의 정석

저자는 자바를 소개하는데 그치지 않고 프로그래머로써 꼭 알아야하는 내용들을 체계적으로 정리하였으며 200페이지에 달하는 지면을 객체지향개념에 할애함으로써 이 책 한 권이면 객체지향

www.aladin.co.kr

 

컬렉션 프레임워크에서는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였다.

컬렉션에 저장된 각 요소에 접근하는 기능을 가진 iterator인터페이스를 정의하고, Collection 인터페이스에는

'Iterator(Iterator를 구현한 클래스의 인스턴스)'를 반환하는 iterator()를 정의하고 있다.

 

public interface Iterator() {
	boolean hasNext();
    Object next();
    viod remove();
}

public interface Collection {
	...
    	public Iterator iterator();
    	...
}

 

Iterator는 Collection 인터페이스에 정의된 메서드이므로 Collection 인터페이스의 자손인 List와 Set에도 포함되어 있다.

그래서 List나 Set 인터페이스를 구현하는 컬렉션은 iterator()가 각 컬렉션의 특징에 알맞게 작성되어 있다. 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문, 주로 while문을 사용해서 컬렉션 클래스의 요소를 읽어 올 수 있다.

 

메서드 설 명
 boolean hasNext()  읽어 올 요소가 남아있는지 화인, 있으면 true 없으면 false
Object next()  다음 요소를 읽어온다. next() 호출하기 전에 hasNext()를 호출해서 읽어올 요소가 있는지 확인하는 것이 안전 
void remove() next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야 한다. (선택적 기능)

 

Collection의 Iterator 사용방법

Collection c = new ArrayList();	// 다른 컬렉션으로 변경시 이 부분만 고치면 된다.
Iterator it = c.iterator();
		
    while(it.hasNext()) {
        System.out.println(it.next());
    }

 

Map인터페이스의 Iterator 사용 방법

Map map = new HashMap();
Iterator it = map.entrySet().iterator();	
// map.entrySet으로 set instance
// map.entrySet을 통해 얻은 Set instance의 iterator()를 호출해서 Iterator instance를 얻음
// Iterator 인스턴스의 참조가 it에 저장됨

 

package kr.co.dong.datastructure;

import java.util.*;

public class IteratorEx {
	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.add("1");
		list.add("2");
		list.add("3");
		list.add("4");
		list.add("5");
		
		Iterator it = list.iterator();
		
		while(it.hasNext()) {
			Object obj = it.next();
			System.out.println(obj);
		}
		
	}
}

'Computer Science > DataStructure' 카테고리의 다른 글

Iterator with Vector  (0) 2022.11.14
ListIterator와 Enumeration  (0) 2022.11.14
Array  (0) 2021.06.09
Implement Linked List  (0) 2021.04.26
Linked List (연결 리스트)  (0) 2021.03.07