시작하며
여러분 안녕하세요!
DreamHanks의 254cm입니다.
이번 시간에는 Iterator 클래스를 알아보겠습니다.
Java의 전체 기사는 여기를 클릭해 주세요.
Iterator이란?
Set처럼 값을 반복하여 꺼내는 처리가 어려운 데이터 스트럭처를 위해
Collection Framework는 Iterator라는 클래스를 제공합니다.
Iterator는 모든 Collection 인터페이스 구현 클래스에 대한 반복 처리를 지원합니다.
하지만 Map은 Collection 인터페이스와 다른 인터페이스이기 때문에 이터레이터를 이용한 반복이 불가능합니다.
샘플
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class ItoratorSample { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); Iterator<String> iterator = list.listIterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } } } |
위의 샘플과 같이 Iterator를 이용하여 반복할 수도 있지만,
현재는 Java5버전에서 추가된 기능인 “enhanced for” 를 이용하여 반복적으로 출력하는 것이 권장되기 때문에 List의 경우에는 Iterator 를 잘 사용하지 않습니다.
출력 결과
1 2 3 4 |
1 2 3 4 |
샘플 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class IteratorSample { public static void main(String[] args) { Set<String> set = new HashSet<String>(); set.add("apple"); set.add("orange"); set.add("mango"); set.add("banana"); Iterator<String> iterator = set.iterator(); while(iterator.hasNext()) { String result = iterator.next(); if(result.equals("mango")) { iterator.remove(); } System.out.println(result); } System.out.println(set); while(iterator.hasNext()) { iterator.next(); } } } |
위의 샘플을 보면 Iterator로 요소를 삭제하고 있습니다.
Iterator에서 삭제된 요소는 현본의 Collection에도 영향을 미치고 삭제된 요소의 원본도 삭제됩니다.
그리고 Iterator는 첫 번째 while에서 마지막으로 도달되고 두 번째 while에서는 다음 값이 존재하지 않기 때문에 두 번째 반복은 실행되지 않습니다.
출력 결과
1 2 3 4 5 |
orange banana apple mango [orange, banana, apple] |
샘플 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class IteratorSample { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("a", "apple"); map.put("b", "banana"); map.put("c", "coconut"); map.put("d", "dried persimmon"); Set<Entry<String, String>> set = map.entrySet(); Iterator<Entry<String, String>> ite = set.iterator(); while(ite.hasNext()) { Entry<String, String> entry = ite.next(); if(entry.getValue().equals("coconut")) { ite.remove(); } System.out.println(entry); } System.out.println(map); System.out.println(set); } } |
위의 샘플과 같이 맵의 요소를 Iterator로 변환하기 위해서는
맵에서 Iterator로 직접 변환할 수 없으므로
맵에서 Entry로 이루어진 세트를 추출한 후 그 세트에서 Iterator를 추출하여 사용합니다.
Iterator 삭제 처리는 오브젝트 주소에 직접 적용되므로
아래의 출력 결과와 같이 현본의 맵의 데이터도 삭제됩니다.
1 2 3 4 5 6 |
a=apple b=banana c=coconut d=dried persimmon {a=apple, b=banana, d=dried persimmon} [a=apple, b=banana, d=dried persimmon] |
끝으로
이번 기사는 이상입니다.
방문해 주셔서 감사합니다.
コメント