[Java] Collection 요소를 순회하는 Iterator

rara_kim·2022년 7월 26일
0

Java

목록 보기
20/39
post-thumbnail

Iterator

자바의 컬렉션 프레임워크(Collection Framework)는 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화하고 있다.
자바에서 Iterator는 컬렉션 프레임워크에서 값을 가져오거나, 삭제할 때 사용한다.

  • 컬렉션 프레임 워크에 저장된 요소들을 하나씩 차례로 참조
  • 순서가 있는 List 인터페이스의 경우는 Iterator를 사용하지 않고 get(i)메소드 활용 가능
  • Set 인터페이스의 경우 get(i) 메소드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회함

Iterator 사용하기

컬렉션 프레임워크를 생성한 뒤 아래와 같이 사용한다.

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

list의 경우 get(i)메소드를 사용할 수 있어 Set이 아닌 경우 사용할 이유가 있나? 싶지만, Iterator를 사용할 시 얻을 수 있는 장단점들은 다음과 같다.

👍Iterator 장점

  • Iterator는 모든 컬렉션 프레임워크에 공통으로 사용가능
  • 컬렉션 프레임워크에서 쉽게 값을 가져오고 제거할 수 있음
  • 3개의 메소드만 알면 되어 사용하기 매우 쉬움

😵Iterator 단점

  • 처음부터 끝까지의 단방향 반복만 가능
  • 값의 변경이나 추가가 불가능
  • 대량의 데이터를 제어할 시 느린 속도

Iterator의 메소드

  • hasNext() : Iterator 안에 다음 값이 있는지 확인 후 true, false를 반환
  • next() : iterator의 다음 값 가져오기
  • remove() : iterator.next()로 가져온 값을 컬렉션(List, Set, Map)에서 삭제(반드시 next() 후에 사용해야 함)

//Member 클래스는 별도 구현

public class MemberTreeSet {
	TreeSet<Member> treeSet;
	
	public MemberTreeSet() {
		treeSet = new TreeSet<Member>(new Member());
	}
	
	public void addMember(Member member) {
		treeSet.add(member);
	}
    
    public boolean removeMember(int memberId) {	   //Iterator를 사용한 삭제
		Iterator<Member> ir = treeSet.iterator();
		while (ir.hasNext()) {
			Member member = ir.next();
			
			int tempId = member.getMemberId();
			if(tempId == memberId) {
				treeSet.remove(member); 
				return true;
			}
		}
		return false;
	}
}



public class MemberHashMap {
	HashMap<Integer, Member> hashMap;
	
	public MemberHashMap() {
		hashMap = new HashMap<>();
	}
	
	public void showAllMember() {     //Iterator를 사용한 출력
		Iterator<Integer> ir = hashMap.keySet().iterator();
		while (ir.hasNext()) {
			int key = ir.next();
			Member member = hashMap.get(key);
			System.out.println(member);
		}
	}
}

profile
느리더라도 꾸준하게

0개의 댓글