Java에서 Iterator
는 컬렉션(Collection) 객체를 순회하면서 원소에 접근할 수 있는 인터페이스입니다. Iterator는 다음 원소를 가리키는 포인터 개념으로 생각할 수 있습니다.
Iterator
인터페이스는 다음과 같은 메서드를 제공합니다:
boolean hasNext()
: 다음 원소가 있는지 여부를 확인합니다. 만약 다음 원소가 있다면 true를 반환하고, 더 이상 원소가 없다면 false를 반환합니다.
E next()
: 다음 원소를 반환합니다. 다음 원소로 이동하며, 해당 원소를 반환합니다.
void remove()
: 현재 원소를 삭제합니다. 이 메서드를 호출하기 전에 반드시 next()를 호출하여 원소를 반환한 상태여야 합니다.
Iterator
를 사용하여 컬렉션을 순회하면서 원소에 접근할 수 있습니다. 예를 들어, ArrayList를 순회하면서 원소를 출력하는 코드는 다음과 같습니다:
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
Integer number = iterator.next();
System.out.println(number);
}
Iterator를 사용하면 컬렉션 내의 원소를 순차적으로 접근할 수 있습니다. 이를 통해 컬렉션의 원소를 추가, 수정, 삭제 등의 작업을 안전하게 수행할 수 있습니다.
HashSet<Person> hSet = new HashSet<Person>();
hSet.add(new Person("LEE", 10));
hSet.add(new Person("LEE", 10));
hSet.add(new Person("PARK", 35));
hSet.add(new Person("PARK", 35));
System.onut.println("저장된 데이터 수: " + hSet.size()); //저장된 데이터 수: 2
System.out.println(hSet); // [LEE(10세), PARK(35세)]
class Person {
private int age;
private String name;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + "(" + age + "세)";
}
@Override
public int hashCode() {
return age;
}
@Override
public boolean equals(Object obj) {
Person person = (Person) obj;
if ((name.equals(person.name)) && (age == person.age))
return true;
else
return false;
}
}
두 인스턴스가 hashCode 메소드 호출 결과로 반환하는 값이 동일해야 한다.
그리고 이어서 두 인스턴스를 대상으로 equals 메소드의 호출 결과 true가 반환되면 동일 인스턴스로 간주한다.
import java.util.Set;
import java.util.HashSet;
public class Lotto {
public static void main(String[] args) {
Set<Integer> lotto = new HashSet<>();
while (lotto.size() != 6) {
int num;
num = (int) (Math.random() * 45) + 1;
lotto.add(num);
}
System.out.println(lotto);
}
}