배열을 보완하는 컬렉션(Collection)
컬렉션은 여러 요소들을 담을 수 있는 자료구조이다. 즉 다수의 데이터 그룹이며 다른 말로 컨테이너라고도 부른다. 배열과 비슷하지만 크기가 고정된 배열을 보완하여 Re-sizable한 특성을 가집니다.
Interface
-> Collection, List, Set, Queue, SortedSet ...
-> Map, SortedMap ...
-> Iterator, Enumeration, Spliterator ....
Class : 위의 인터페이스들을 구현한 다양한 클래스들
별도로 컬렉션 클래스를 구현하는 것보다 이미 구현되어 있는 것을 사용함으로써 코딩 시간을 감소시킬 수 있다.
컬렉션 프레임워크들은 잘 테스트되고 검증되어 있기 때문에 코드 품질을 보장한다. JDK에 포함된 컬렉션 프레임워크들을 사용하여 코드 유지보수 시간을 감소시킬 수 있다. 재사용 가능하고 상호 운용성이 보장된다.
컬렉션 프레임워크 계층 구조
제네릭(Generics)으로 표현
컬렉션 인터페이스들은 제네릭으로 표현되어 컴파일 시점에서 객체의 타입을 체크하기 때문에 런타임 에러를 줄이는 데 도움이 된다. 예를 들어 런타임 시 발생하는 ClassCastException을 컴파일 시점에서 찾아낼 수 있다. 또한 클래스 캐스팅을 하지 않아도 되고 instansof를 사용하지 않아도 되므로 코드를 좀 더 깔끔하게 유지할 수 있다.
List 인터페이스
Set 인터페이스
Map 인터페이스
List, Set 인터페이스는 Collection 인터페이스를 상속받는다. 따라서 인터페이스와 Set 인터페이스의 공통된 부분을 Collection 인터페이스에서 정의하고 있다. 반면 Map 인터페이스는 구조상의 차이(Key-Value)로 인해 Collection 인터페이스를 상속받지 않고 별도로 정의된다.
Collection 인터페이스는 직접적인 구현은 제공하지 않으며 모든 컬렉션 클래스가 구현해야하는 메서드를 포함하고 있다.
boolean add(Object o) : 지정된 객체(o)를 Collection에 추가
boolean addAll(Collection c) : Collection의 객체들을 Collection에 추가
void clear() : Collection의 모든 객체 삭제
boolean contains(Object o) : 지정된 객체(o)가 Collection에 포함되어있는지 확인
boolean containsAll(Collection c) : Collection의 객체들이 Collection에 포함되어있는지 확인
boolean equals(Object o) : 동일한 Collection인지 비교
int hashCode() : Collection의 hash code를 반환
boolean isEmpty() : Collection이 비어있는지 확인
Iterator iterator() : Collection의 iterator를 얻어서 반환
boolean reamove(Object o) : 지정된 객체 삭제
boolean removeAll(Collection c) : 지정된 Collection에 포함된 객체들을 삭제
boolean retainAll(Collection c) : 지정된 Collection에 포함된 객체만 남기고 다른 객체들은 Collection에서 삭제, 이 작업 후에 Collection에 변화가 있으면 true를 그렇지 않으면 false를 반환
int size() : Collection에 저장된 객체의 개수 반환
Object[] toArray() : Collection에 저장된 객체를 객체배열로 반환
Object[] toArray(Object[] a) : 지정된 배열에
Collection의 객체를 저장해서 반환
List 인터페이스는 순서가 있는 컬렉션이며 중복 요소를 포함할 수 있으며 인덱스로 모든 요소에 접근할 수 있다.
void add(int index, Object element) : 지정된 위치(index)에 객체(element)를 추가
boolean addAll(int index, Collection c) : 지정된 위치(index)에 컬렉션에 포함된 객체들을 추가
-Object get(int index) : 지정된 위치(index)에 있는 객체를 반환
int indexOf(Object o) : 지정된 객체의 위치(index)를 반환 (List의 첫 번째 요소부터 순방향으로 찾음)
int lastIndexOf(Object o) : 지정된 객체의 위치(index)를 반환 (List의 마지막 요소부터 역방향으로 찾음)
ListIterator listIterator(), ListIterator listIterator(int index) : List의 객체에 접근할 수 있는 ListIterator를 반환
Object remove(int index) : 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환
Object set(int index, Object element) : 지정된 위치(index)에 객체(element)를 저장
void sort(Comparator c) : 지정된 비교자(comparator)로 List 정렬
List subList(int fromIndex, int tolndex) : 지정된 범위(fromIndex부터 tolndex)에 있는 객체 반환
Set 인터페이스는 중복 요소를 포함할 수 없으며 랜덤 액세스(Random access)를 허용하지 않으므로, iterator 또는 foreach를 이용하여 요소를 탐색할 수 있다. Set 인터페이스로 구현된 클래스는 HashSet, TreeSet, LinkedHashSet 이 있다.
Set 인터페이스의 메소드는 Collection 인터페이스의 메소드와 동일하다.
boolean add(Object o) : 지정된 객체(o)를 Collection에 추가
boolean addAll(Collection c) : Collection의 객체들을 Collection에 추가 (합집합)
void clear() : Collection의 모든 객체 삭제
boolean contains(Object o) : 지정된 객체(o)가 Collection에 포함되어있는지 확인
boolean containsAll(Collection c) : Collection의 객체들이 Collection에 포함되어있는지 확인 (부분집합)
boolean equals(Object o) : 동일한 Collection인지 비교
int hashCode() : Collection의 hash code를 반환
boolean isEmpty() : Collection이 비어있는지 확인
Iterator iterator() : Collection의 iterator를 얻어서 반환
boolean reamove(Object o) : 지정된 객체 삭제
boolean removeAll(Collection c) : 지정된 Collection에 포함된 객체들을 삭제 (차집합)
boolean retainAll(Collection c) : 지정된 Collection에 포함된 객체만 남기고 다른 객체들은 Collection에서 삭제, 이 작업 후에 Collection에 변화가 있으면 true를 그렇지 않으면 false를 반환 (교집합)
int size() : Collection에 저장된 객체의 개수 반환
Object[] toArray() : Collection에 저장된 객체를 객체배열로 반환
Object[] toArray(Object[] a) : 지정된 배열에 Collection의 객체를 저장해서 반환