java 교체 서브 모드 상세 설명
반복자 모드는 집합된 원소를 순서대로 접근할 수 있으며 집합된 내부 이미지를 노출하지 않아도 된다.
교체자는 외성 교체자와 내성 교체자로 나눌 수 있다.
외성 교체자: 백색 상자 집합(백색 상자 집합은 외부에 자신의 내부 원소 인터페이스를 방문하는 집합)에 적합하다. 교체의 논리는 집합 대상 자체가 제공하기 때문에 이런 외성 교체자 역할은 교체된 커서 위치만 유지한다.그래서 구체적인 교체자 역할은 외부 클래스로 그 구조 함수는 구체적인 집합 대상을 받아들여 이 집합 대상의 교체 논리를 호출할 수 있다.
내성 교체자: 블랙박스 집합(블랙박스 집합은 외부에 자신의 원소 대상을 두루 돌아다니는 인터페이스를 제공하지 않음)에 적용되며, 블랙박스가 모인 원소 대상은 내부 구성원만 방문할 수 있기 때문에 내성 교체자는 내부 구성원만 집합할 수 있다.
간단한 설명:
package test.edu.inter;
public interface IteratorObj {
/**
*
*/
public void first();
/**
*
*/
public boolean hasNextItem();
/**
*
*/
public Object currentItem();
}
package test.edu.inter;
public interface DataSet {
public IteratorObj getIterator();
}
package test.edu.inter;
public class Iterator1 implements IteratorObj {
private Dataobj set;
private int size;
private int index=0;
public Iterator1(Dataobj set){
this.set = set;
this.size = set.getSize();
}
@Override
public void first() {
// TODO Auto-generated method stub
this.index = 0;
}
@Override
public boolean hasNextItem() {
if(index<size){
return true;
}
return false;
}
@Override
public Object currentItem() {
Object ob = set.getItem(index);
if(index<size){
index++;
}
return ob;
}
}
package test.edu.inter;
public class Dataobj implements DataSet {
private Object[] objArray = null;
/**
*
*/
public Dataobj(Object[] objArray){
this.objArray = objArray;
}
@Override
public IteratorObj getIterator() {
return new Iterator1(this);
}
public Object getItem(int index){
return objArray[index];
}
public int getSize(){
return objArray.length;
}
}
package test.edu.inter;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] str={"12312","dasda","dasd","12d","asd"};
Dataobj ao = new Dataobj(str);
IteratorObj io = ao.getIterator();
while(io.hasNextItem()){
System.out.println(io.currentItem());
}
}
}
실행 결과:
12312
dasda
dasd
12d
asd
내용 확장:java 집합에서의 응용자바에 있어요.util.Collection 인터페이스는 iterator () 공장 방법을 제공하여 iterator 형식의 대상을 되돌려줍니다. Collection 인터페이스의 하위 형식인 AbstractList 클래스의 내부 구성원 클래스인 itr는 iterator 인터페이스를 실현합니다.그래서 Itr는 내성 교체자류이지만 AbstractList도 자신의 역행 방법을 제공하기 때문에 블랙박스가 아니라 화이트박스가 모인다.코드는 다음과 같습니다.
import java.util.Iterator;
public interface Itr extends Iterator{
// next()
int cursor = 0;
//
int lastRet = -1;
int expectedModCount = modCount;
public boolean hasNext(){
return cursor!=size();
}
public Object next(){
try{
Object next = get(cursor);
checkForComodification();
lastRet = cursor++;
return next;
}catch(IndexOutOfBoundsException e){
checkForComodification();
throw new NoSuchElementException();
}
}
// ,remove()
public void remove(){
if(lastRet ==-1)
throw new IllegalStateException();
checkForComodification();
try{
AbstractList.this.remove(lastRet);
if(lastRet<cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
}catch(IndexOutOfBoundsException e){
throw new ConcurrentModificationException();
}
}
public void checkForComodification(){
if(modCount!=expectedModCount)
throw new ConcurrentModificationException();
}
}
그 중modCount, get(cursor) 등 변수와 방법은 모두 AbstractList 클래스가 가지고 있으며 Itr는 직접 사용할 수 있다.방법 check For Comodification () 은 집합된 내용이 방금 외부에서 직접 수정되었는지 검사합니다. (교체자가 제공하는remove () 방법으로 수정된 것이 아닙니다.)만약 교체자가 시작된 후 모인 내용이 외부에 의해 교체자 대상을 돌려 직접 수정된다면 이 방법은 즉각 이상을 던진다.또한 AbstractList 클래스는listIterator() 방법을 제공하여Listiterator 인터페이스를 실현한 클래스ListItr 실례를 되돌려줍니다.ListIterator 인터페이스는 정방향 교체와 역방향 교체를 실현하였으며, 교체 과정에서 열의 내용을 안전하게 수정하는 방법을 제공하였다.
Enumeration과 Iterator의 차이점: (1) Enumeration은 remove 방법이 없다. (2) Enumeration은 Vector의 element () 방법에서 무명류를 작용하여 이루어진다. 이것은 Fail Fast를 지불하지 않는다. 즉, 교체 과정에서 대상을 모으는 것이 외부에서 의외로 직접 수정되면 이 교체 과정은 즉시 어떠한 이상도 포착할 수 있다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.