List, Set, Queue 이런 인터페이스는 사실 그 위에 Collection 인터페이스라는 조상을 가지고 있다. 덕분에 공통적으로 사용 가능한 여러 메서드가 있는데 이번 시간에는 이에 대해 알아보려고 한다. 추가적으로 Iterable과 Iterator 도 알아둘 필요가 있다. 이 역시 List, Set, Queue 에서 공통적으로 사용할 수 있는 기능이다. 자바의 세계는 역시 복잡해...😂
자바에서 컬렉션 프레임워크란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
이러한 컬렉션 프레임워크는 자바의 인터페이스를 사용하여 구현되어있다.
이미지 출처 : https://nage.wo.tc/57
대표적인 3개 인터페이스 List, Set, Map 중에서 List와 Set은 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의되어있다.
컬렉션 프레임워크를 구성하는 모든 클래스가 제네릭으로 표현되어있다는 것도 특징이다.
인터페이스 | 구현 클래스 | 설명 |
---|---|---|
List<E> | LinkedList, ArrayList, Vector | 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. |
Set<E> | HashSet, TreeSet | 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. |
Map<K,V> | HashMap, TreeMap, Hashtable | 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음. |
List와 Set 인터페이스의 많은 공통된 부분을 Collection 인터페이스에서 정의하고, 두 인터페이스는 그것을 상속 받는다고 했다. 그렇다면 이 Collection 인터페이스에는 무엇이 정의되어있을까?
Iterator<E>
iterator() : 해당 컬렉션의 반복자(iterator)를 반환함. 저 표에는 없지만 indexOf에 대해도 알아두면 좋을거 같다. 목록에서 지정된 요소가 처음 나타나는 인덱스를 반환하거나 요소를 찾을 수 없으면 -1을 반환한다.
List<Integer> values = List.of(5, 3, 4, 7, 6, 2, 9, 6);
int item = 6;
int index = values.indexOf(item);
System.out.println(index);
따라서 이런식으로 코드를 사용할 수 있는 것도 다 그런 이유에서이다. 파이썬에서도 이런 비슷한 개념이 있지. ㅇㅇ
List list = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}