#024. Interface Iterator<E> 알아보기...
1. Iterator Interface 는 앞에서 배운 HashSet, ArrayList 등.. 의 collection 들의 데이터를 하나씩 꺼내거나, 데이터가 더이상 존재하는지 확인 하거나, 데이터를 삭제할 수 있는 기능을 구현하도록 되어 지시가 되어 있을 것이다. ( hasNext(), next(), remove() )
2. 먼저 Java API 로 Interface Iterator 에 대해서 확인해보자.
API 주소 : http://download.oracle.com/javase/6/docs/api/ (자주 사용하니, 즐겨찾기 추가를 하자!)
설명 | 첫번째 이미지에서 왼쪽부터 위아래로 순서대로 누른다. HashSet 에는 iteratoer<E> 로 반환하는 iterator() 메서드를 지원을 해준다. Iterator<E> 를 클릭하고, 아래쪽으로 내려와 보면 위 두번째 그림처럼 보이게 될 것이다. hasNext(): 메서드의 반환형은 boolean 이다. 즉,데이터가 있으면 true 없으면 false 를 반환한다. Next(): 메서드의 반환형은 E 이다. 즉, 데이터를 E 타입으로 반환한다. remove(): 메서드의 반환형은 void 없다. item을 삭제한다. |
2. 이전에 사용했던, SetDemo class / ListDemo class 를 활용해서 테스트 해보겠다.
1) SetDemo class : HashSet 에 iterator 사용해보기...
코드 | package util; import java.util.HashSet; import java.util.Iterator; public class SetDemo { public static void main(String[] args) { HashSet<String> names = new HashSet<String>(); names.add("김동혁"); names.add("이연희"); names.add("김준호"); System.out.println("김동혁 포함여부..: " + names.contains("김동혁") ); System.out.println("names 가 비었는지 확인: " + names.isEmpty() ); names.add("김동혁"); //데이터 중복 추가 names.remove("김준호"); //삭제 //데이터 추출 for(String name : names){ System.out.println(name); } Iterator<String> iter = names.iterator(); while(iter.hasNext()){ String name = iter.next(); System.out.println("iter: " + name); } System.out.println("원소의 갯수: " + names.size()); names.clear(); //모두삭제 } } |
결과 | 김동혁 포함여부..: true names 가 비었는지 확인: false 이연희 김동혁 iter: 이연희 iter: 김동혁 원소의 갯수: 2 |
설명 | 이전 소스에서 박스 그려진 두 곳만 변경이 되었다. 문장16: names.iterator() 로 부터 Iterator 형을 iter 객체를 생성한다. 문장17: hasNext() 데이터가 있는지 확인하고 있다면, true 를 발생한다. 문장18: iter.Next() 메서드를 사용해서 String name 에 값을 전달 받는다. 문장19: 전달받은 name 변수의 값을 출력 해본다. 문장20: iter.remove() 를 넣어보면, names 의 값이 사라지는 것을 볼 수 있다. 이것은 iterator 가 참조 값으로 처리한다는 것을 유추해 볼 수 있다. |
2) ListDemo class : ListArry 에 iterator 사용해보기...
코드 | package util; import java.util.ArrayList; import java.util.Iterator; public class ListDemo { public static void main(String[] args) { ArrayList<String> names = new ArrayList<String>(); names.add("김동혁"); names.add("이연희"); names.add("김준호"); System.out.println("김동혁 포함여부..: " + names.contains("김동혁") ); System.out.println("names 가 비었는지 확인: " + names.isEmpty() ); names.add("김동혁"); //데이터 중복 추가 names.remove("김준호"); //삭제 //데이터 추출 for(String name : names){ System.out.println(name); } //데이터 추출 for ( int i=0; i<names.size(); i++ ){ System.out.println("[ " + i + " ]번째: " + names.get(i)); } Iterator<String> iter = names.iterator(); while(iter.hasNext()){ String name = iter.next(); System.out.println("iter: " + name); } System.out.println("원소의 갯수: " + names.size()); names.clear(); //모두삭제 } } |
결과 | 김동혁 포함여부..: true names 가 비었는지 확인: false 김동혁 이연희 김동혁 [ 0 ]번째: 김동혁 [ 1 ]번째: 이연희 [ 2 ]번째: 김동혁 iter: 김동혁 iter: 이연희 iter: 김동혁 원소의 갯수: 3 |
설명 | 본문 2-1) HashSet 의 사용법과 100% 동일하다. 따로 설명할 내용이 없다. ^^ |
2-1) 예제 설명의 iter.remove() 도 사용해보고 어떻게 변경 되는지 확인해보자.
다음시간엔 Exception (예외처리) 에 대해서 알아보자...
잡담. 고생하셨습니다. ^^" 이제 거의 oop가 끝이 보이는 군요 *^^*
'Developer > Java-oop' 카테고리의 다른 글
#026. I/O Stream 알아보기... (0) | 2011.04.14 |
---|---|
#025. Exception (예외처리) 알아보기... (0) | 2011.04.14 |
#023. Collection HashMap<K,V> 알아보기... (0) | 2011.04.11 |
#022. Collection ArrayList<E> 알아보기... (0) | 2011.04.10 |
#021. Collection HashSet<E> 알아보기... (0) | 2011.04.10 |