프로그래밍 정리/자바

Iterator(반복자)와 ListIterator

혼자라서 2013. 5. 29. 19:39
반응형

Iteratoa(반복자)


1. 사용 이유

- Iterator를 사용함으로써 구현 부분관 분리해서 하나씩 셀 수 있기 때문.

Iterator를 활용하면 ArrayList, HashMap과 같은 어떤 컬렉션이라도 동일한 방식으로 그 컬렉션 안에 있는 모든 항목에 접근할 수 있다.

컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있다.


2. 사용 방법

for문을 사용했을 경우

for(int i=0; i<list.size(); i++){

list.get(i);

}


iterator를 사용한 경우

Iterator iter = list.iterator();

while(iter.hasNext()){

iter.next();

}


3. 주의 사항

HashMap map = new HashMap();

Iterator iter = map.values().iterator(); 로 사용

이유는 맵계열은 키와 값을 지원하기 때문에 값만 뽑아낸 상태에서 (values()) 그에 대한 순환문을 돌려야 하기 때문입니다.


4. 사용예제

public class test_iterator implements Iterable(<String> {

private List<String> list = new ArrayList<String>();

public void add(String name){

list.add(name);

}


public Iterator<String> iterator(){

return new Iterator<String(){

int seq = 0;

public boolean hasNext(){

return seq < list.size();

}


public String next(){

return list.get(seq++);

}

public void remove(){

throw new UnsupportedOperationException();

}

};

}


public static void main(String[] arg){

test_iterator magicians = new test_iterator();

magicians.add("Kim yong jun");

magicians.add("Keyboard");

magicians.add("Mousr");


Iterator<String> iterator = magicians.iterator();

while(iterator.hasNext()){

String element = iterator.next();

System.out.println(element);

}

}

}




ListIterator


1. 사용 이유

- ListIterator는 iterator를 상속받아서 기능을 추가한 것으로, 컬렉션의 요소에 접근할 때 iterator는 단방향으로만 이동할 수 있는데 반해,

ListIterator는 양방향으로 이동이 가능하다.


2. 사용 방법

boolean hasNext() : iterator를 앞방향으로 진행하여 객체를 확인

boolean hasPrevious() : 반대 방향으로 진행하여 객체를 확인

Object next() : iterator에서 다음 객체를 리턴

Object previous() : iterator에서 이전 객체를 리턴

void remove() : next() 또는 previous()로 리턴된 마지막 객체를 제거

void set(Object o) ; next() 또는 previous()로 리턴된 마지막 객체와 o를 바꿈

int nextIndex() : next() 호출로 리턴될 객체의 인덱스

int previousIndex() : previous() 호출로 리턴된 객체의 인덱스

void add(Object o) : list에 객체 o를 추가


3. 주의 사항

- ArrayList나 LinkedList와 같이 List인터페이스를 구현한 컬렉션에서만 사용 가능하다.


4. 사용 예제

public class test_listiterator{

public static void main(String[] args){

List<String> list = new ArrayList<String>();

list.add("1");

list.add("2");

list.add("3");

list.add(1, "insert");


ListIterator lir = list.listIterator();


System.out.print("hasNext : " );

while(lir.hasNext() )P

System.out.print(lir.next() + ", ");

}


System.out.println();


System.out.print("hasPreviious : ");


while(lir.hasPrevious())P

System.out.print(lir.previous() +", ");

}

}

}

반응형

'프로그래밍 정리 > 자바' 카테고리의 다른 글

Entry  (0) 2013.05.29
Map  (0) 2013.05.29
List  (0) 2013.05.29
Iterator(반복자)  (0) 2013.05.29
자료구조(Data Structure)와 자료구조의 기본(Set, List, Map)  (0) 2013.05.27