iterator
자바에서 iterator란 컬렉션 프레임워크에서 값을 가져오는 용도로 사용됩니다.
그렇기에 값들을 출력할때는 iteraotr를 써서 값을 출력해야 합니다.
Iteraotr를 사용한다면 데이터의 자료들을 조금 더 쉽게 가져 올 수 있습니다.
iterator의 메서드
iterator의 메서드는 대표적으로 이렇게 있습니다.
가장 많이 쓰는 값은
- hasNext()
- next()
- remove()
입니다.
hasNext()의 경우 값이 있다면 true 없다면 false를 반환하기 때문에
반복문에 많이 넣습니다. 값이 없을때까지 무한 반복문을 실행시킵니다.
next()의 경우는 값을 읽어올 때 사용합니다. 즉 값을 출력할때 사용한다는 뜻입니다.
remove()의 경우 값을 제거할 때 사용합니다.
hasnext(),next()사용 예제 보기
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1);
list.add(2); list.add(3); list.add(4);
Iterator iterator = list.iterator();
while (iterator.hasNext())
System.out.println(iterator.next()); // 값 1 2 3 출력
}
iterator의 사용 조건
iterator는 List와 Set의 자료구조에 포함되어있는 메서드입니다.
그렇기 때문에 MAP같은 자료구조는 iterator를 사용 할 수 없습니다.
- SET
- LIST
사용방법
사용방법은 간단합니다.
어떤 자료구조를 생성하고 그 자료구조 값안에 iterator에 대입 시키면 됩니다.
사진으로 본다면
저는 TreeSet 객체를 생성 했습니다.
그 참조 변수값을 iterator에 넣었고 이러면 iterator로 사용이 가능 합니다.
public class EX11_12 {
public static void main(String[] args) {
Set set = new TreeSet();
set.add(1);
set.add(2);
set.add(3);
set.add(4);
Iterator iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
예시코드로 한번 봅시다.
저는 Treeset을 만들었고 그 값에 1,2,3,4의 정수를 집어 넣었습니다.
그 후에 set의 메서드를 iterator의 넣었고
iterator의 메서드를 이용해서 값들을 출력 했습니다.
잘 나오는 것을 확인 할 수 있습니다.
iterator를 쓰는 이유?
그러면 문득 생각이 들 수 있습니다.
그냥 반복문으로 돌리면 되는 부분을 왜 iterator를 사용해서 값들을 출력하는지
이해가 안될 수 있습니다.
그 이유는 앞서 설명드렸다 싶이 데이터를 손쉽게 제어하기 위해서입니다.
iterator를 사용한다면
hasnext()
next()등의 iterator의 고유한 메서드를 사용 할 수 있기 때문에
자료를 쉽게 출력하는 것이 가능합니다.
객체 값을 집어 넣을땐?
저희는 객체 값을 넣는 경우도 많이 발생합니다.
하지만 iterator를 사용할때 이 방법을 모를 경우 객체 주소 값이 반환이 됩니다.
또한 iterator는 toString으로 오버라이딩 해도 객체 주소값이 반환이 됩니다.
package 자바의정석;
import java.util.*;
public class EX11_12 {
public static void main(String[] args) {
Set set = new TreeSet();
set.add(new Test(5,"hi"));
set.add(new Test(10,"no"));
Iterator iterator = set.iterator();
System.out.println(iterator);
}
}
class Test implements Comparable {
int number;
String name;
Test(int number, String name) {
this.name = name;
this.number = number;
}
@Override
public int compareTo(Object o) {
return -1;
}
public String toString() {
return "number은 :" + number + ":" + "name은 :" + name;
}
}
저는 Test 클래스에 생성자를 만든 후 toString으로 값들을 오버라이딩 했습니다.
원래라면 값들이 잘 출력이 되어야 하는데..
이렇게 객체 주소 값들이 반환이 됩니다.
그 이유는 무엇일까요?
쉽게 생각해서 iterator는 데이터를 만질 때 자기 고유한 메서드로 제어를 해야 합니다
그렇기 떄문에 toString의 오버라이딩+hasnext()로 값들을 출력해야 합니다.
이렇게 while문을 사용함과 동시에 iterator의 next를 이용해서 값들을 출력해야만 정상적인 값들이 나오게 됩니다.
오버라이딩 한 대로 잘 나오는 것을 확인 할 수 있습니다.
'JAVA 기초' 카테고리의 다른 글
[자바 기초] 인터페이스란? 인터페이스와 다형성의 대해 쉽게 알아보자 (2) | 2023.03.11 |
---|---|
[자바]Thread(쓰레드)의 이해와 개념 (1) | 2022.12.12 |
[자바]Arraylist,LinkedList 사용방법 (1) | 2022.11.26 |
자바 상속(extends)의 개념 한번에 이해하기 (1) | 2022.11.24 |
try catch문이란? 이 글 하나로 쉽게 끝내자. (2) | 2022.11.24 |