Iterator
는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 한것이다.
간략히 설명하자면
List
: 순서를 유지하는 데이터의 집합. 데이터의 중복 허용O
Set
: 순서를 유지하지 않는 데이터의 집합. 데이터의 중복 허용X
Map
: 키(Key)와 값(Value)으로 이루어진 데이터의 집합. 순서는 유지되지 않고, 키는 중복을 허용X 값은 중복 허용O
Iterator
는 어떤 컬렉션이라도 동일한 방식으로 접근이 가능하여 그 안에 있는 항목들에 접근할 수 있는 방법을 제공한다. (다형성)1)
hasNext()
: 다음 요소에 읽어 올 요소가 있는지 확인하는 메소드이다. (유무에 따라 true와 false를 반환한다.)
2)next()
: 다음 요소를 가져온다.
사용방법
1) Iterator 개체는 컬렉션 개체의 iterator() 메소드를 호출하여 얻어올 수 있다.
2) hasNext() 메서드로 이동이 가능한지 확인한 후에 next() 메서드로 해당 위치의 보관한 개체를 참조하여 원하는 작업을 수행한다.
Set을 이용하여 Iterator를 적용해보겠다.
// 선언
Set<String> set = new HashSet<String>();
// 요소추가
set.add("제육");
set.add("닭갈비");
set.add("돈까스");
set.add("김치찌개");
set.add("김치찌개"); // Set이라서 중복값은 허용하지 않는다.
// Iterator
Iterator<String> itr = set.iterator();
while(itr.hasNext()) {
String element = itr.next();
System.out.println(element);
}
// 돈까스
// 제육
// 닭갈비
// 김치찌개
Map은 key값과 Value값이 따로 있기 때문에 keySet()
메소드를 이용하여 Iterator를 할 수 있다.
keySet()
: key값만 set에 저장한다.
간단한 예제로 살펴보겠다.
// HashMap 선언
Map<String, Object> map = new HashMap<String, Object>();
// Map에 요소추가
map.put("page", 1);
map.put("column", "제목");
map.put("query", "날씨");
// keySet() 키 값만 Set에 저장
Set<String> keys = map.keySet();
System.out.println(keys); // [query, column, page]
// Iterator를 이용한 순회출력
Iterator<String> itr = keys.iterator();
while(itr.hasNext()) { // key를 빼는 것.
String key = itr.next();
Object value = map.get(key);
System.out.println(key + ":" + value);
}
// query:날씨
// column:제목
// page:1