디자인 모드 의 Interator 모드
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;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.