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 |