[Java/Collection] Enumeration, Iterator, ListIterator

최지수·2022년 4월 29일
0

Java

목록 보기
22/27
post-thumbnail

Collection Framework
데이터 군을 저장하는 클래스들을 표준화한 설계를 의미해요. 다수의 데이터 그룹들을 관리하는 표준화된 프로그래밍 방식을 말해요.

자바에선 다수의 데이터를 다루는데 필요한 다양하고 풍부한 클래스들을 제공하며, 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 재사용성이 높은 코드를 제공해요.

Iterator(Enumeration)

Collection framework는 저장된 요소들을 읽어오는 방법을 Iterator를 통해 표준화해썽요. 저장된 각 요소에 접근하는 기능을 가진 Iterator 인터페이스를 정의하고, Collection 인터페이스에는 Iterator(Iterator 구현 클래스 인스턴스)를 반환하는 iterator()를 정의하고 있어요.

Enumeration이라는 인터페이스도 존재하는데, 레거시 코드고 기존 코드를 동작하게 유지하기 위해 존재하는 것이라 이를 개선한 Iterator 인터페이스를 사용하는 것이 좋아요.

public interface Iterator {
	boolean hastNext();
    Object next();
    void remove();
}

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

iterator()Collection 인터페이스에 정의된 메서드로, 이를 상속하는 ListSet도 각 특징에 맞게 작성되어 있어요. 주로 while문을 통해 요소들을 읽어들일 수 있어요.

List<Integer> list = new ArrayList();
// 무언가 추가!

// Iterator 변수
Iterator iter = list.iterator();
// 읽어들일 요소가 있을 때까지 반복, 일종의 커서 역할이에요.
while(false == iter.hasNext()) {
	// 현재 커서의 데이터를 읽고 iter는 다음 요소로 커서 이동
	System.out.println(iter.next());
}

ListIterator

Iterator보다 많은 기능을 제공해요. 정방향 접근만 가능한 Iterator와 달리, ListIterator는 역방향으로도 접근이 가능해요. 다만, ArrayListLinkedList와 같이 List 인터페이스를 구현한 Collection 클래스에서만 동작해요.

hasMoreElements

읽어 올 요소가 남았는지 확인해요. IteratorhasNext와 동일해요.

newElement

다음 요소를 읽어와요. 이걸 수행하기 전에 hasMoreElement로 먼저 체크하는게 안전해요.

hasNext/hasPrevious 그리고 next/previous

각각 다음/이전 요소가 있는지 확인하고 다음/이전 요소를 반환해요.

remove

next() 또는 previous()로 읽어온 요소를 삭제해요. 대상을 삭제하려면 반드시 nextprevious 호출 후에 해야 해요(물론 로직에 따라 다르긴 해요~).

set

next(), previous()로 읽어온 요소를 지정된 매개변수로 변경해요. 마찬가지로 nextprevious 호출 후에, 물론 로직에 따라 다르지만, 사용해야 해요.

ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");

ListIterator iter = list.listIterator();
while(!iter.hasNext())
	System.out.print(iter.next());	// 12345

// next를 통해 커서가 끝까지 같으니까 여기서부터 역순으로 진행할 수 있어요
while(!iter.hasPrevious())
	System.out.print(iter.next());	// 54321
profile
#행복 #도전 #지속성

0개의 댓글