컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다.
참고로 Enumeration은 Iterator의 구버전이고, ListIterator는 Iterator의 기능을 향상 시킨 것이다.
메소드 | 설명 |
---|---|
boolean hasNext() | 읽어 올 요소가 남아있는지 확인 |
Object next() | 다음 요소를 읽어온다. |
아래는 ArrayList에 저장된 요소를 출력하는 예제이다.
Collection<String> c = new ArrayList<>(); // 다른 컬렉션으로 변경시 이 부분만 변경하면 된다.
c.add("hello");
c.add("world");
c.add("happy");
Iterator<String> it = c.iterator();
while(it.hasNext())
System.out.println(it.next());
컬렉션을 읽는 방법을 Iterator를 이용해서 표준화했기 때문에
만약 HashSet으로 변경하고 싶으면 첫 번째 줄만 변경하면 된다.
Collection<String> c = new HashSet<>();
참조변수가 Collection 타입이기 때문에 그 아래 나머지 코드는 검토하지 않아도 된다.
Map 인터페이스를 구현한 컬렉션 클래스는 키(key)와 값(value)을 쌍으로 저장하고 있기 때문에
iterator()를 직접 호출할 수 없다.
대신 keySet() 이나 entrySet() 과 같은 메소드를 통해서 키와 값을 각각 따로 Set의 형태로 얻은 후
다시 iterator()를 호출하면 된다.
Map<String, String> map = new HashMap<>();
Iterator<String> it = map.keySet().iterator();
객체 정렬에 필요한 메소드(정렬기준)를 정의한 인터페이스
Comparable 기본 정렬기준을 구현하는데 사용.
Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
public interface Comparable<T> {
public int compareTo(T o);
}
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
Comparable과 Comparator의 실제 소스코드이다.
compare()과 compareTo() 는 두 객체를 비교하는 같은 기능을 가진 메소드이다.
위의 조건으로 반환하도록 각 메소드를 구현해야 한다.
참고로 equals 메소드는 Comparator를 구현하는 클래스에서 오버라이딩이 필요할 수 있다는 것을
알리기 위해 정의된 것이다.
다음은 사용예제이다.
public class ComparatorEx {
public static void main(String[] args) {
String[] strArr = {"jpa", "spring", "java", "csharp", "Nodejs"};
Arrays.sort(strArr); // String Comparable 구현에 의한 정렬
print(strArr);
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER);
print(strArr);
Arrays.sort(strArr, new Descending());
print(strArr);
}
private static void print(String[] strArr) {
System.out.println("strArr=" + Arrays.toString(strArr));
}
}
class Descending implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}
Arrays.sort(strArr);
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER);
Arrays.sort(strArr, new Descending());