Iterator

2023. 4. 13. 20:41·📚 Data Architect/Data Structure

💡 Iterator

자바의 컬렉션 프레임워크에서 컬렉션의 요소들을 읽어오는 방법을 표준화 하였는데 그 중 하나가 Iterator 이다.

Iterator와 Iterable은 Collection의 상위 인터페이스이다.
상향된 for문을 쓰기위한 인터페이스 구현


Iterator의 구현 메서드

  • boolean hasNext() -> 다음 요소가 있다면 true 반환
  • E next() -> 포인터
  • void remove()
  • void forEachRemaning(Consumer actions)

Iterable의 구현 메서드

  • Iterator iterator()
  • void forEach(Consumer actions)
  • Spliterator spliterator()

img


Iterator 인터페이스

  • hasNext()
    • 임시포인터를 만들어 포인터가 null을 가리키는지 여부만 확인하는 로직만 쓰면 됨
  • next()
    • hasNext()가 true이면 현재 포인터가 가리키는 데이터를 반환하고 다음 요소로 포인터를 옮긴다
  • remove()
    • 원래는 UnsupportedOperationException을 던지면 됬었지만
    • 자바 1.8 이후로 이 메서드를 쓸 필요가 없음
  • forEachRemaining()
    • 마찬가지로 자바 1.8 이후로 쓸 필요가 없다

Iterable 인터페이스

  • iterator() 메서드를 상속한 하위 클래스에서 생성을 강제하는 역할
  • iterator의 hasNext(), next() 등을 활용할 수 있다
  • 이 인터페이스를 구현한 객체를 for-each loop를 사용할 수 있게 된다

구현

  • 전 포스팅에서 구현한 LinkedList 클래스의 내부 클래스로 넣어줌
  • 이 클래스를 구현함으로써 상향된 for문을 쓸 수가 있다
    /* ----------------- Iterator ----------------- */
    class IteratorHelper implements Iterator {

        Node<E> index;

        public IteratorHelper() {
            index = head;
        }

        // index가 null 이면 반환할게 없다 (비어있거나, 요소의 끝에 왔을때)
        @Override
        public boolean hasNext() {
            return (index != null);
        }

        /**
         * hasNext가 false면 Exception을 던지고
         * 요소가 있으면 임의의 변수인 val에 현재 포인터가 가리키는 데이터를 반환하고
         * 포인터를 다음 요소로 옮긴다
         */
        @Override
        public Object next() {
            if (!hasNext()) {
                throw new NoSuchElementException();
            }

            E val = index.data;
            index = index.next;
            return val;
        }
    }
저작자표시 (새창열림)

'📚 Data Architect > Data Structure' 카테고리의 다른 글

Stack  (0) 2023.04.13
Doubly Linked List & Circular Linked List  (0) 2023.04.13
Singly Linked List (단순 연결 리스트)  (0) 2023.04.13
Time Complexity (시간 복잡도 - Big O Notation)  (0) 2023.04.13
자료구조 기본 개념  (0) 2023.04.13
'📚 Data Architect/Data Structure' 카테고리의 다른 글
  • Doubly Linked List & Circular Linked List
  • Singly Linked List (단순 연결 리스트)
  • Time Complexity (시간 복잡도 - Big O Notation)
  • 자료구조 기본 개념
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      React #Markdown
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Iterator
    상단으로

    티스토리툴바