다수의 데이터를 처리하는 표준화된 방법을 제공하는 클래스들의 집합을 말한다. 데이터를 처리하는 자료구조와 알고리즘을 구조화하여 클래스로 구현한 것이다.
배열의 경우 생성 시 저장할 수 있는 객체 수가 결정되기 때문에 불특정 다수의 객체를 저장할 때 사용하기는 불편하다. 또한 특정 인덱스의 참조값을 null로 바꿔서 객체를 배열에서 삭제하는 경우 일부 인덱스가 비게 되기 때문에 새로운 객체를 저장하기 위해 어느 인덱스가 비어 있는지 일일이 확인해야 하는 불편함이 있다.
주요 인터페이스로는 List, Set, Map이 있고, 다음과 같은 상속관계를 가진다.
인터페이스 | 설명 | 구현 클래스 |
---|---|---|
List<E> | 순서가 없는 데이터의 집합으로, 데이터의 중복 허용 | Vector, ArrayList, LinkedList, Stack, Queue |
Set<E> | 순서가 없는 데이터의 집합으로, 데이터의 중복 허용 X | HashSet, TreeSet |
Map<K, V> | 키와 값의 한 쌍으로 이루어지는 데이터의 집합이며, 순서 없음. 키는 중복 불가, 값은 중복 가능 | HashMap, TreeMap, Hashtable, Properties |
컬렉션 프레임워크에 속하는 List, Set, Map 인터페이스 중 하나를 구현한 클래스를 말한다.
Vector, Hashtable의 경우, 기존 코드와의 호환성을 위해 남아있는 것이므로 이 대신 ArrayList, HashMap 등을 사용하는 것이 좋다.
import java.util.*;
public class Collection01 {
public static void main(String[] args) {
// 리스트 생성
ArrayList<String> arrList = new ArrayList<String>();
// 리스트에 요소의 저장
arrList.add("넷");
arrList.add("둘");
arrList.add("셋");
arrList.add("하나");
// 리스트 요소의 출력
for(int i = 0; i < arrList.size(); i++) {
System.out.println(arrList.get(i));
}
}
}
List와 Set의 경우 공통된 부분을 Collection 인터페이스에서 정의하고, 두 인터페이스가 상속받는다.
메서드 | 설명 |
---|---|
boolean add(Object o) boolean addAll(Collection o) | 지정된 객체나 매개변수 Collection의 모든 객체들을 Collection에 추가 |
void clear() | Collection의 모든 객체 삭제 |
boolean contains(Object o) boolean containsAll(Collection o) | 지정된 객체나 Collection의 모든 객체들이 Collection에 포함되어 있는지 확인 |
boolean equals(Object o) | 매개변수 객체와 동일한지 확인 |
int hashCode() | Collection의 hash Code를 반환 |
boolean isEmpty() | 비어있는지 확인 |
Iterator iterator() | Collection의 iterator를 얻어서 반환 |
boolean remove(Object o) | 지정된 객체 삭제 |
boolean removeAll(Collection c) | 지정된 Collection에 포함된 모든 객체 삭제 |
int size() | Collection에 저장된 객체 수 반환 |
Object[] toArray() | Collection의 객체들을 Object 배열로 반환 |
Object[] toArray(Object[] a) | 지정된 배열에 Collection 객체를 저장해서 반환한다. |