본문 바로가기
Language/Java

자바 Iterator 개념부터 사용 방법까지

by wakestand 2020. 4. 19.
반응형

자바에서 Iterator는

컬렉션 프레임워크(Collection Framework)에서

값을 가져오거나 삭제할 때 사용하는데

 

먼저 컬렉션 프레임워크는

List, Set, Map, Queue 등을 말한다

 

다음으로 컬렉션 프레임워크를 생성한 뒤

Iterator<데이터타입> iterator명 = 컬렉션.iterator();

이렇게 사용하게 된다

 

list.get(값); 이런 식으로 가져올 수 있는데

직접 꺼내올 수 없는 Set이 아니라면야

사용 이유가 있나? 뭣하러 쓰나 싶겠지만

 

Iterator를 사용할 시 얻는 장점은 다음과 같다

 

Iterator는 모든 컬렉션 프레임워크에 공통으로 사용 가능

컬렉션 프레임워크에서 쉽게 값을 가져오고 제거할 수 있음

3개의 메소드만 알면 되어서 사용하기 매우 쉽다

 

반면 단점은 다음과 같은데

 

처음부터 끝까지의 단방향 반복만 가능하고

값을 변경하거나 추가가 불가능하고

대량의 데이터를 제어할 때 속도가 느리다

 

이제 Iterator의 메소드를 한번 알아보자

근데 3개의 메소드를 제외하면

사용할 일이 없다

 

Iterator.hasNext()

- Iterator 안에 다음 값이 들어있는지 확인

들었으면 true, 안들었음 false

 

Iterator.next()

- iterator의 다음 값 가져오기

 

Iterator.remove()

- iterator에서 next() 시에 가져왔던 값을

컬렉션(List, Set, Map) 등에서 삭제

반드시 next() 후에 사용해야 함

 

이제 정리해 보자면

Iterator는 자바 컬렉션 프레임워크에서

(List, Set, Map, Queue 등)

값을 가져오거나 삭제할 때 공통으로 사용 가능하며

 

Iterator<데이터타입> iterator명 = 컬렉션.iterator();

이렇게 정의하고

 

while(iterator명.hasNext()) {

iterator.next();

}

 

이런 방식으로 주로 사용하게 된다

 

Iterator의 장점은

Iterator는 모든 컬렉션 프레임워크에 공통으로 사용 가능

컬렉션 프레임워크에서 쉽게 값을 가져오고 제거할 수 있음

3개의 메소드만 알면 되어서 사용하기 매우 쉽다

 

단점은

처음부터 끝까지의 단방향 반복만 가능하고

값을 변경하거나 추가가 불가능하고

대량의 데이터를 제어할 때 속도가 느리다

 

마지막으로 예제에 사용한 코드는 아래와 같다

 

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("A");
		list.add("B");
		list.add("C");
		
		HashSet<String> set = new HashSet<String>();
		set.add("A");
		set.add("B");
		set.add("C");
		
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("A", "1");
		map.put("B", "2");
		map.put("C", "3");
		
		Iterator<String> iterList = list.iterator();
		Iterator<String> iterSet = set.iterator();
		Iterator<String> iterMap = map.keySet().iterator();
		
		// Iterator에 있는 값 꺼내기
		// while(iterList.hasNext()) {
		// 	 System.out.println(iterList.next()); 
		// }
		 
		System.out.println(iterList.next()); // iterator 다음 값 가져오기
		iterList.remove(); // next()에 나온 값을 list에서 삭제함
		System.out.println("Remove 테스트용");
		
		for(int i = 0; i<list.size(); i++) {
			System.out.println(list.get(i)); // A 삭제된 것 확인 가능
		}
		
	}
반응형

댓글