[자바 학습 노트] Iterator 와 Iterable 인터페이스

3450 단어 자바
Iterator 와 Iterable 은 모두 자바 의 교체 기 인터페이스 로 차이 점도 있 고 관계 도 있 습 니 다. 다음은 인터페이스 정의, 실현 과 방법 호출 세 가지 측면 에서 두 인터페이스의 관계 와 사용 방법 을 분석 합 니 다.
1. 인터페이스 정의
1.1 Iterable
    Iterable 은 자바. lang 에 포함 되 어 있 으 며, 사용 시 import 가 필요 하지 않 습 니 다. 그 정 의 는 다음 과 같 습 니 다.
public interface Iterable{
    Iterator iterator();
}

    Iterable 인 터 페 이 스 는 iterator 방법 (대소 문자 주의, Iterator 인터페이스 와 다 름) 을 제공 합 니 다. 이 방법 은 Iterator 인 터 페 이 스 를 되 돌려 줍 니 다.여기 서 설명 해 야 할 것 은 방법 은 인 터 페 이 스 를 되 돌 릴 수 있 지만 실제 이 방법 을 호출 할 때 이 인 터 페 이 스 를 실현 하 는 특정한 인 스 턴 스 (뒤에 예 를 들 어 설명 할 수 있 습 니 다) 입 니 다.
1.2 Iterator
    Iterable 이 Iterator 인터페이스 로 돌아 온 이상 Iterator 의 정 의 를 살 펴 보 자.Iterable 과 달리 Iterator 는 java. util. Iterator 클래스 에 포함 되 어 있 기 때문에 사용 할 때 먼저 import 를 해 야 합 니 다.
public interface Iterator{
   boolean hasnext();  #         
   Item next();        #       
   void remove();      #    ,      
}

    Iterator 는 Iterable 보다 훨씬 정상 적 이 고 세 가지 방법 을 잘 이해 합 니 다.
2. 인터페이스 구현
    다음은 stack 을 예 로 들 어 새로운 collection 에서 이 두 인 터 페 이 스 를 어떻게 실현 하 는 지 설명 한다.
import java.util.Iterator;
public class ArrayStack implements Iterable{
    private Item[] a = (Item[]) new Object[100];
    private int N = 0;
    public void push(Item item){}
    public Item pop(){}
    
    public Iterator iterator(){
        return new ArrayIterator();
    }
    private class ArrayIterator implements Iterator{
        private int i = 0;
        public boolean hasNext() {return i < N;}
        public Item next() {return a[i++];}
        public void remove() {}
    }
}

    주의해 야 할 것 은 stack 이 Iterable 인 터 페 이 스 를 실현 하고 Iterable 의 iterator 방법 (대소 문자 구분 에 주의 하 는 것) 을 통 해 Array Iterator 류 의 대상 을 되 돌려 주 는 것 입 니 다. Array Iterator 는 바로 Iterator 방법 을 실현 하 는 유형 입 니 다. 이것 이 바로 앞에서 말 한 방법 으로 인 터 페 이 스 를 되 돌려 주 는 것 입 니 다. 사실은 이 인 터 페 이 스 를 실현 하 는 인 스 턴 스 를 되 돌려 주 는 것 입 니 다.왜 Iterable 인 터 페 이 스 를 먼저 실현 하고 Iterator 인 터 페 이 스 를 직접 실현 하지 않 느 냐 는 질문 이 있 을 수 있 습 니 다. 이렇게 내부 클래스 를 하나 더 쓰 는 것 은 번 거 롭 지 않 습 니까?       사실 이해 하기 도 쉬 워 요. 인터넷 에서 설명 을 보면 잘 해 요.
     Iterator 인터페이스의 핵심 방법 인 next () 나 hasNext () 는 교체 기의 현재 교체 위치 에 의존 하기 때문이다. Collection 이 Iterator 인 터 페 이 스 를 직접 실현 하면 집합 대상 에 현재 교체 위치 가 포 함 된 데이터 (포인터) 를 가 져 올 수 밖 에 없다. 집합 이 서로 다른 방법 간 에 전 달 될 때 현재 교체 위 치 를 미리 설정 할 수 없 기 때문에 next () 방법의 결 과 는 예측 할 수 없 는 것 이 됩 니 다. Iterator 인터페이스 에 reset () 방법 을 추가 하지 않 으 면 현재 교체 위 치 를 초기 화 할 수 있 습 니 다. 그럼 에 도 불구 하고 Collection 은 현재 교체 위치 만 동시에 존재 할 수 있다. Iterable 은 그렇지 않 으 면 호출 할 때마다 처음부터 계산 하 는 교체 기 를 되 돌려 줍 니 다. 여러 개의 교체 기 는 서로 간섭 하지 않 는 다. 
     출처: 클릭 하여 링크 열기
3. 인터페이스 방법 호출
    Iterator 호출 의 예 는 인터넷 에서 너무 많 습 니 다. 글 개념의 완전 성 을 위해 가장 간단 한 두 가지 호출 만 보 여 줍 니 다.
4. 567913. 위 는 표준 적 인 Iterator 를 호출 하여 출력 을 옮 겨 다 니 는 예 입 니 다. 두 번 째 줄 코드 는 오 해 를 가 져 올 수 있 습 니 다. 인터페이스 가 정례 화 된 것 처럼 보이 지만 사실은 그렇지 않 습 니 다.우 리 는 인터페이스 가 실례 화 되 어 서 는 안 된다 는 것 을 알 고 있다. 위의 방법 으로 인 터 페 이 스 를 되 돌려 주 는 것 과 유사 하 다. 이곳 의 '인터페이스 실례 화' 는 사실은 이 인 터 페 이 스 를 실현 한 대상 이다. 다시 말 하면 두 번 째 줄 은 
ArrayStack as = new ArrayStack();
Iterator i = as.iterator();
while(i.hasNext()){
    String s = i.next();
    StdOut.println(s);
}
Iterator i = new ArrayIterator();

   p. s. 네, python 입 니 다.

좋은 웹페이지 즐겨찾기