디자인 모드 의 Interator 모드

이 예 는 자바 jdk 의 ArrayList 및 LinkedList 를 모 의 한 것 입 니 다.
1. Array List 클래스 를 만 듭 니 다. 이 클래스 는 배열 과 같은 저장 대상 을 실현 하고 용기 에 있 는 요소 의 개 수 를 계산 할 수 있 습 니 다.

package com.yx.zzg.iterator;

public class ArrayList{

	int index = 0;
	Object[] objects = new Object[10];

	public void add(Object o) {
		if (index == objects.length) {
			Object[] newObjects = new Object[objects.length * 2];
			System.arraycopy(objects, 0, newObjects, 0, objects.length);
			objects = newObjects;
		}
		objects[index] = o;
		index++;
	}

	public int size() {
		return index;
	}

}

2. 링크 목록 을 만 들 고 링크 처럼 대상 을 저장 합 니 다.

package com.yx.zzg.iterator;

public class LinkedList {

	Node head = null;

	Node tail = null;

	int size = 0;

	public void add(Object o) {
		Node n = new Node(o, null);
		if (head == null) {
			head = n;
			tail = n;
		} else {
			tail.setNext(n);
			tail = n;
		}
		size++;
	}

	public int size() {
		return size;
	}
}

3. 테스트 클래스 작성:

package com.yx.zzg.iterator;

public class Test {
	public static void main(String[] args) {
		//   LinkedList new   LinkedList,                             //(Collection)  
                ArrayList c = new ArrayList();
		for (int i = 0; i < 15; i++) {
			c.add(new Cat(i));
		}
		System.out.println(c.size());
	}

}

4. Collection 인 터 페 이 스 를 추출 하여 Array List 와 LinkedList 가 모두 이 인 터 페 이 스 를 실현 하고 호출 할 때 인 터 페 이 스 를 통 해 호출 합 니 다.

package com.yx.zzg.iterator;

public interface Collection {
	
	public void add(Object o);
	
	public int size();

}

5. 집합 은 옮 겨 다 녀 야 하지만 두 용기 의 옮 겨 다 니 는 방식 이 다 릅 니 다. (Array List 는 배열 의 방식 이 고 LinkedList 는 링크 의 방식 입 니 다) 같은 옮 겨 다 니 는 방식 의 효 과 를 얻 기 위해 인터페이스 (Iterator) 를 정의 할 수 있 습 니 다.

package com.yx.zzg.iterator;

public interface Iterator {

	boolean haseNext();

	Object next();

}

6. Collection 클래스 에서 Iterator 인 터 페 이 스 를 되 돌려 주 는 방법 iterator 방법 을 제공 하기 때문에 마지막 Collection 인터페이스 의 마지막 정 의 는:

package com.yx.zzg.iterator;

public interface Collection {
	
	public void add(Object o);
	
	public int size();
	
	Iterator iterator();

}

7. Array List 류 와 LinkedList 류 는 모두 Collection 인 터 페 이 스 를 실현 하기 때문에 iterator 방법 을 실현 해 야 하기 때문에 Array List 와 LinkedList 의 마지막 정 의 는:

package com.yx.zzg.iterator;

public class ArrayList implements Collection {

	int index = 0;
	Object[] objects = new Object[10];

	public void add(Object o) {
		if (index == objects.length) {
			Object[] newObjects = new Object[objects.length * 2];
			System.arraycopy(objects, 0, newObjects, 0, objects.length);
			objects = newObjects;
		}
		objects[index] = o;
		index++;
	}

	public int size() {
		return index;
	}

	@Override
	public Iterator iterator() {
		return new ArrayListIterator();
	}
        //  Iterator  ,         
	private class ArrayListIterator implements Iterator {
		private int currentIndex = 0;

		@Override
		public boolean haseNext() {
			if (currentIndex >= index)
				return false;
			else
				return true;
		}

		@Override
		public Object next() {
			Object o = objects[currentIndex];
			currentIndex++;
			return o;
		}

	}

}

package com.yx.zzg.iterator;

public class LinkedList implements Collection {

	Node head = null;

	Node tail = null;

	int size = 0;

	public void add(Object o) {
		Node n = new Node(o, null);
		if (head == null) {
			head = n;
			tail = n;
		} else {
			tail.setNext(n);
			tail = n;
		}
		size++;
	}

	public int size() {
		return size;
	}

	@Override
	public Iterator iterator() {
		return new LinkedListIterator();
	}

	private class LinkedListIterator implements Iterator {

		@Override
		public boolean haseNext() {
			return false;
		}

		@Override
		public Object next() {
              return null;			
		}

	}

}

좋은 웹페이지 즐겨찾기