1. 뜻
배열, 컬렉션 프레임 워크등을 순회할 때, 지금 위치가 어딘지 알려주는 '책갈피 같은 존재'
Iterator를 원하는 위치로 이동 시켜서 원하는 작업(조회, 추가, 삭제)을 시킨다.
(1)Iterator의 초기 위치
(2) 반복자 적을 때 Tip
반복자 선언문의 오른쪽 편만 다 적어놓고, iterator(); 에 ctrl + alt + V 누르면 왼쪽이 자동 완성됨.
Mudo.entrySet().iterator();
//ctrl + alt + v
Iterator<Map.Entry<String, Integer>> itEn3 = Mudo.entrySet().iterator();
2. 코드리뷰
package Chap_09;
import java.util.*;
public class _08_Iterator {
public static void main(String[] args) {
//iterator
//반복자 쓸 리스트 선언
List<String> list = new ArrayList<>();
// 더미 값이 리스트에 많이 추가된 상황 가정
list.add("유재석");
list.add("(알 수 없음)");
list.add("김종국");
list.add("(알 수 없음)");
list.add("강호동");
list.add("(알 수 없음)");
list.add("박명수");
list.add("(알 수 없음)");
list.add("조세호");
for (String s :
list) {
System.out.println(s);
}
System.out.println("-------------------------");
//반복자 선언: Iterator<자료형> 반복자_이름 = 자료구조.iterator();
//it = list.iterator();에 마우스 옮기고 Ctrl + alt + v 하면 자동으로 완성
Iterator<String> it = list.iterator();
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println("-------------------------");
//커서를 처음 위치로 이동
it = list.iterator();
//반복자 순회 -> it.hasNext(); => 반복자가 넘어갈 다음 값이 있는지 boolean 반환
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("-------------------------");
// it.next() => 현재 커서 위치 기준 다음 요소를 가져온다.
// s.contains() method => () 값이 String 값 안에 있는지 확인하여 boolean 반환
// s.contains()는 대소문자 구분하고, 공백도 구분해서 다른 값이라 인지 함.
// ex) " my"랑 "my"랑 다은 값으로 인지
it = list.iterator();
while(it.hasNext()){
String s = it.next();
if(s.contains("(알 수 없음)")){
//커서가 있는 위치의 list 값을 제거
it.remove();
}
}
it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("-------------------------");
HashSet<String> set = new HashSet<>();
set.add("유재석");
set.add("박명수");
Iterator<String> itSet = set.iterator();
while(itSet.hasNext()){
System.out.println(itSet.next());
}
System.out.println("-------------------------");
HashMap<String, Integer> map = new HashMap<>();
map.put("유재석", 10);
map.put("박명수", 5);
// map.iterator();는 틀린 표현.
// why? -> map의 Key와 Value 중 어떤 값을 기준으로 반복자가 순회하는지 모호하기 때문
//Key를 기준으로 Iterator 순회
Iterator<String> itMapKey = map.keySet().iterator();
while (itMapKey.hasNext()){
System.out.println(itMapKey.next());
}
System.out.println("-------------------------");
// Value를 기준으로 Iterator 순회
Iterator<Integer> itMapValue = map.values().iterator();
while (itMapValue.hasNext()){
System.out.println(itMapValue.next());
}
System.out.println("-------------------------");
// <K,V> 한 쌍을 기준으로 Iterator 순회
Iterator<Map.Entry<String, Integer>> itMap = map.entrySet().iterator();
while (itMap.hasNext()){
System.out.println(itMap.next());
}
}
}
*마지막 HashMap 한 쌍 기준 순회의 결과 값
3. 스스로 해보기
import java.util.*;
public class Iterator_Myself {
public static void main(String[] args) {
// ArrayList 에 관해서 iterator 순회
// 리스트 선언
ArrayList<String> Entry = new ArrayList<>();
Entry.add("이대은");
Entry.add("이 Unknown");
Entry.add("송승준");
Entry.add("송 Unknown");
Entry.add("오준원");
Entry.add("오 Unknown");
Entry.add("이홍구");
Entry.add("이 Unknown");
Entry.add("이대호");
Entry.add("이 Unknown");
Entry.add("심수창");
Entry.add("심 Unknown");
Entry.add("유희관");
Entry.add("유 Unknown");
//리스트 순회
for (String s :
Entry) {
System.out.println(s);
}
System.out.println("--------------------------------");
//반복자 선언
Iterator<String> itArray = Entry.iterator();
//반복자를 이용해 순회
while (itArray.hasNext()){
System.out.println(itArray.next());
}
System.out.println("-------------------------------");
//반복자 초기 위치로 원상복귀
itArray = Entry.iterator();
System.out.println(itArray.next());
System.out.println("-------------------------------");
//반복자를 이용해 "(알 수 없음)" 이란 말이 들어간 원소들 지우기 -> 지우고 난 뒤 전체 순회
while (itArray.hasNext()){
String temp = itArray.next();
if(temp.contains("Unknown")){
itArray.remove();
}
}
for (String s :
Entry) {
System.out.println(s);
}
System.out.println("-------------------------------");
// HashSet 에 관해서 iterator 순회
// HashSet 선언
HashSet<String> Entry2 = new HashSet<>();
Entry2.add("손흥민");
Entry2.add("이강인");
Entry2.add("김민재");
Entry2.add("황희찬");
Entry2.add("이재성");
Entry2.add("오현규");
Entry2.add("정우영");
// 반복자 선언
Iterator<String> itEn2 = Entry2.iterator();
// 반복자로 순회
while (itEn2.hasNext()){
System.out.println(itEn2.next());
}
System.out.println("-------------------------------");
// HashMap 에 관해서 iterator 순회
// HashMap 선언
HashMap<String, Integer> Mudo = new HashMap<>();
Mudo.put("유재석",1);
Mudo.put("박명수",2);
Mudo.put("정준하",3);
Mudo.put("노홍철",4);
Mudo.put("하하",5);
Mudo.put("정형돈",6);
Mudo.put("길",7);
// Key 를 기준으로 Iterator 만들어서 순회
Iterator<String> KeyIt = Mudo.keySet().iterator();
while (KeyIt.hasNext()){
System.out.println(KeyIt.next());
}
System.out.println("-------------------------------");
// Value 를 기준으로 Iterator 만들어서 순회
Iterator<Integer> ValueIt = Mudo.values().iterator();
while (ValueIt.hasNext()){
System.out.println(ValueIt.next());
}
System.out.println("-------------------------------");
// <K,V> 한 쌍을 기준으로 Iterator 만들어서 순회
Iterator<Map.Entry<String, Integer>> itEn3 = Mudo.entrySet().iterator();
while (itEn3.hasNext()){
System.out.println(itEn3.next());
}
}
}
'Language > Java' 카테고리의 다른 글
[JAVA] 람다식과 함수형 인터페이스 (0) | 2023.02.16 |
---|---|
[JAVA] 익명 클래스 (0) | 2023.02.15 |
[JAVA] HashMap (0) | 2023.02.13 |
[JAVA]HashSet (0) | 2023.02.09 |
[JAVA] Linked List (0) | 2023.02.08 |