Iterator 반복자라는 뜻으로 자료를 얻어 내는데 사용.
이 자료를 얻어내는 iterator()메소드는 컬렉션(Collection) 자료형이라면 관계없이
사용가능하다.
For 문 등으로 충분히 자료들을 꺼내올 수 있는데, 굳이 Iterator 가 필요한 이유는?
혹 ArrayList 에 담긴 데이터를 Set으로 옮겼다면 일반적으로 출력문까지 전면 수정이 필요하지만
Iterator는 데이터를 빼오는 방식을 표준화하는데 목적이 있어 코드 재활용이 가능하다(다형성)
Iterator 대표 메소드
hasNext():
뒤에 남은 데이터가 있으면 True, 없으면 False 반환
while 루프를 통한 제어처리시 사용한다.
next()
자료구조의 다음 데이터를 반환하여, 다음 객체의 레퍼런스를 얻는다.
remove()
현재 조회하는 객체의 레퍼런스를 삭제한다.
Enumeration 은 iterator 에서 reomve() 메소드만 빠지고, 이름이 다를 뿐 사용법이 같다.
hasMoreElements() : Iterator의 .hasNext()와 같은 기능이다.
nextElement(): iterator의 next()와 같은 기능이다.
public class test {
public static void main(String[] args) {
//ArrayList에서 iterator 인터페이스 사용하기
System.out.println("===ArrayList===");
//List 선언
ArrayList<String> list = new ArrayList<>();
for(int i=0; i<3; i++) {
list.add("AAA" + i);
}
//Iterator 선언
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
//HashSet에서 iterator 인터페이스 이용하기
System.out.println("===HashMap===");
HashMap<Integer, String> map = new HashMap<>();
for(int i=0; i<3; i++) {
map.put(i, "AAA" + i);
}
Iterator<Integer> it3 = map.keySet().iterator();
while(it3.hasNext()) {
int key = it3.next();
System.out.println("key : " + key);
System.out.println("/ value: " + map.get(key));
}
//HashMap에서 iterator 인터페이스 이용하기
System.out.println("===HashSet===");
HashSet<String> set = new HashSet<>();
for(int i =0; i<3; i++) {
set.add("ABC" + i);
}
Iterator<String> it2 = set.iterator();
while(it2.hasNext()) {
System.out.println(it2.next());
}
System.out.println("===ArrayList 사용 예제===");
ArrayList<String> nameList = new ArrayList<>();
String name;
nameList.add("A");
nameList.add("B");
nameList.add("C");
nameList.add("D");
nameList.add("E");
nameList.add("F");
Iterator<String> it4 = nameList.iterator();
while(it4.hasNext()) {
name = it4.next();
if("F".equals(name)) {
it4.remove();
}
}
for(String li : nameList) {
System.out.println(li);
}
System.out.println("===Vector===");
Vector<String> vt = new Vector<>();
vt.addElement("A");
vt.addElement("B");
vt.addElement("C");
vt.addElement("D");
vt.addElement("E");
Enumeration<String> e = vt.elements();
while(e.hasMoreElements()) {
System.out.println(e.nextElement());
}
}
}
두 개의 인터페이스는 거의 비슷하지만 스레드(thread)의 지원 여부가 다르다.
iterator : 스레드에 안전하지 않고, Enumeration 은 스레드에 안전하다.
'자바 한계단' 카테고리의 다른 글
직렬화 Serialize 란? (0) | 2022.01.27 |
---|---|
제네릭 Generic (0) | 2022.01.27 |
Map 컬렉션 - HasMap, Hashtable (0) | 2021.12.08 |
다형성 ploymorphism (0) | 2021.10.17 |
상속 Inherit (0) | 2021.10.17 |