05_Iterator 인터페이스

charl hi·2022년 6월 21일
0

자바의정석2

목록 보기
5/13

Iterator 인터페이스

링크텍스트

메서드

remove()

void remove()
  • next()로 읽어 온 요소를 삭제한다. <- 특정위치의 요소를 삭제하는 것이 아님!!
  • 단독으로 쓰일 수 없음
    -> ✨ next()를 호출한 다음에 호출해야 한다!!

사용하는 이유

  • 공통 인터페이스를 정의해서 표준을 정의하고 구현하여 표준을 따르도록 함으로써 코드의 일관성을 유지하여 재사용성을 극대화하는 것 -> 객체지향 프로그래밍의 목적

✨참조변수의 타입을 Collection으로 하는 이유

  • Collection에 없고 ArrayList..등에만 있는 메서드를 사용하는게 아니라면 Collection 타입의 참조변수로 선언하는 것이 좋다.
  • 만일 Collection인터페이스를 구현한 다른 클래스(LinkedList)로 바꿔야 한다면, 선언문 하나만 변경하면 나머지 코드는 검토하지 않아도 되기 때문에



ListIterator 인터페이스

  • Iterator를 상속받아서 기능을 추가한 것
  • 컬렉션의 요소에 접근할 때 양방향으로의 이동이 가능
  • List인터페이스를 구현ArrayList, LinkedList만 사용이 가능!

메서드

  1. boolean hasNext()

  2. boolean hasPrevious()

  3. Object next() <- hasNext()호출 후

  4. Object previous() <- hasPrevious()호출 후

  5. void remove()



ListIteratorEx1

import java.util.ArrayList;
import java.util.ListIterator;

public class ListIteratorEx1 {

	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");

		ListIterator it = list.listIterator();
		
		while(it.hasNext()) {
			System.out.println(it.next());	// 순방향으로 진행하면서 읽어온다.
		}
		
		System.out.println();
		
		while(it.hasPrevious()) {
			System.out.println(it.previous());	//역방향으로 진행하면서 읽어온다.
		}
	}

}

->

1
2
3
4
5

5
4
3
2
1


IteratorEx2

import java.util.ArrayList;
import java.util.Iterator;

public class IteratorEx2 {

	public static void main(String[] args) {
		ArrayList original = new ArrayList(10);
		ArrayList copy1 = new ArrayList(10);
		ArrayList copy2 = new ArrayList(10);
		
		for(int i=0; i<10; i++) {
			original.add(i + "");
		}
		Iterator it = original.iterator();
		
		while(it.hasNext()) {
			copy1.add(it.next());
		}
		System.out.println("== original에서 copy1으로 복사(copy) ==");
		System.out.println("original : "+original);
		System.out.println("copy1 : "+copy1);
		System.out.println("copy2 : "+copy2);
		System.out.println();
		
//		재사용이 안되므로 다시 얻어와야 한다.
		it = original.iterator();
		
		while(it.hasNext()) {
			copy2.add(it.next());
			it.remove(); //꼭!! next()호출한 다음에 사용!!
		}
		System.out.println("== original에서 copy2로 이동(move) ==");
		System.out.println("original : "+original);
		System.out.println("copy1 : "+copy1);
		System.out.println("copy2 : "+copy2);
	}

}

->

== original에서 copy1으로 복사(copy) ==
original : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
copy1 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
copy2 : []

== original에서 copy2로 이동(move) ==
original : []
copy1 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
copy2 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

0개의 댓글