[Java] 자바 #36, Iterator 반복자
- 프로그래밍 언어/Java
- 2019. 3. 5. 22:01
Iterator
- 컬렉션 프레임워크에서 저장된 요소를 읽어오는 방법을 표준화하기 위한 역할(인터페이스)
- Collection의 하위 컬렉션들이 소유 -> Iterator 타입의 객체를 반환하는 메소드를 이미 구현
- List, Set계열에 구현(Map은 없음)
- 주로 읽기 전용으로 사용한다.
Iterator의 주요멤버
1. boolean hasNext()
2. T next()
3. remove()
ArrayList<String> list = new ArrayList<String>();
list.add("사과");
list.add("바나나");
list.add("포도");
list.add("파인애플");
list.add("복숭아");
List에 데이터를 담고 반복을 돌리는 방법?
1. for 문
for( int i =0; i<list.length; i++){
출력문( list.get(i) );
}
2. for-each문(향상된 for문)
for( String str : list ){
출력문( str );
}
3. Iterator 반복자
Iterator<String> iter = list.iterator();
while(iter.hasNext()){ //얘는 true, false 반환, 있으면 true, 없으면 false 이제 이정도 짬은 되겠죠?
System.out.println(iter.next());
}
Map 계열도 반복을 돌린다??
- 반복을 돌린다기보다는 전체 Map계열의 키를 알면 값을 알 수 있겠죠? 이런 맵계열 컬렉션의 특징을 통해 Iterator를 이용하여 반복을 돌릴수가 있습니다.
- keySet() 메소드를 이용한다. -> Map계열의 전체 키Set을 반환.
- 코드로 보시죠.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Example{ public static void main(String[] args){ HashMap<String, String> map = new HashMap<String, String>(); map.put("one", "하나"); map.put("two", "둘"); map.put("three", "셋"); map.put("four", "넷"); map.put("five", "다섯"); // 해쉬맵 루프 돌리기. // -Map계열은 순서가 없어서 루프 돌리기 힘들다. //Collection > List - Set Set<String> keys = map.keySet(); // 해쉬맵의 키의 집합. Iterator<String> iter = keys.iterator(); while(iter.hasNext()) { String key = iter.next(); //***** System.out.printf("map.get(\"%s\")=%s\n",key,map.get(key)); } } } | cs |
map의 key 데이터 타입과 같은 타입으로 Set 타입 객체를 반환하여 여기에 iterator를 만들고 키값을 돌리면 됩니다!!
1 2 3 4 5 6 7 8 9 | class Example{ public static void main(String[] args){ Collection<String> value = map.values();//값의 집합. iter = value.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); } } } | cs |
하지만 이런식으로 직접 값들을 얻어올 수도 있습니다. 하지만 연관배열이라함은 키와 값을 연관지어 사용하는 것에 의미가 있으므로 value만 따로 전체 가져오는 행동은 그닥 쓰일만한 곳이 없을 것입니다만. 혹시나 알아두세요.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #38, TreeMap, Properties 개념 (0) | 2019.03.06 |
---|---|
[Java] 자바 #37, Set 계열 컬렉션(HashSet, TreeSet) (0) | 2019.03.06 |
[Java] 자바 #35, 배열 관련 라이브러리 및 Array클래스의 활용 (0) | 2019.03.04 |
[Java] 자바 #34, List 인터페이스 계열 컬렉션(ArrayList, LinkedList, Vector) & ArrayList vs LinkedList 예제 (0) | 2019.03.04 |
[Java] 자바 #33, 컬렉션의 종류와 인터페이스(List, Map, Set) (0) | 2019.03.03 |