📚 자바의 정석을 정리한 내용입니다.
Collections Framework는 다수의 데이터를 다루는 데 필요한 다양한 클래스를 제공한다.
상속계층도
이미지 출처 : http://dinfree.com/lecture/language/112_java_6.html
interface | 특징 | 구현 클래스 |
---|---|---|
List | 순서가 있는 데이터 집합. 중복 허용 | ArrayList, LinkedList, Stack, Vector 등 |
Set | 순서를 유지하지 않는 데이터 집합. 중복 없음. | HashSet, TreeSet |
Map | key, value 쌍(pair)으로 이루어진 데이터 집합. 순서 유지 안 됨. key는 중복 안 됨. | HashMap, TreeMap, Hashtable, Properties |
컬렉션 프레임워크의 모든 컬렉션 클래스들은 List, Set, Map중 하나를 구현하고 있다. 또한 구현한 인터페이스의 이름을 포함하고 있기 때문에 쉽게 구분할 수 있다.
예외로 Vector, Hashtable, Properties는 컬렉션 프레임워크 이전부터 있었기 때문에 명명규칙을 따르지 않는다.
Collection인터페이스는 컬렉션 클래스에 저장된 데이터를 읽고, 추가하고 삭제하는 기본적인 메서드를 정의하고 있다.
method | 설명 |
---|---|
boolean add(Obejct o) boolean addAll(Collection c) | 지정된 객체Object 또는 Collection의 객체를 Collection에 추가한다. |
void clear() | Collection의 모든 객체를 삭제한다. |
boolean contains(Object o) boolean containsAll(Collection c) | 지정된 Object 또는 Collection객체가 Collection에 포함되어 있는지 확인한다. |
boolean equals(Object o) | 동일한 Collection인지 확인한다. |
int hashCode | Collection의 hash code를 반환한다. |
boolean isEmpty() | Collection이 비어있는지 확인한다. |
Iterator iterator() | Collection의 Iterator를 얻어서 반환한다. |
boolean remove(Object o) | 지정된 객체를 삭제한다. |
boolean removeAll(Collection c) | 지정한 Collection에 포함된 객체를 삭제한다. |
int size() | Collection에 저장된 객체의 수를 반환한다.(=length) |
Object[] toArray() | Collection에 저장된 객체를 객체배열Object[]로 반환한다. |
Object[]toArray(Object[] a) | 지정한 배열a에 Collection의 객체를 저장해서 반환한다. |
List인터페이스의 특징
method | 설명 |
---|---|
void add(int index, Object element) boolean addAll(int index, Collection c) | 지정한 index에 객체element 또는 컬렉션에 포함된 객체를 추가한다. |
Object get(int intex) | 지정한 index에 있는 객체 반환한다. |
int indexOf(Object o) | 지정한 객체의 위치를 순방향으로 찾아서 반환한다. |
int lastIndexOf(Object o) | 지정한 객체의 위치를 역방향으로 찾아서 반환한다. |
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 toIndex) | 지정한 범위from~to에 있는 객체를 반환한다. |
특징
구현 클래스로 HashSet, TreeSet이 있음. (위 계층도 참고)
key와 value를 하나로 묶어서 저장하는 컬렉션 클래스를 구현할 때 사용한다.
구현 클래스는 위 그림 참고
method | 설명 |
---|---|
void clear() | Map의 모든 객체 삭제한다. |
boolean containsKey(Object key) | 지정한 key와 일치하는 객체가 있는지 확인한다. |
boolean containsValue(Object value) | 지정한 value와 일치하는 객체가 있는지 확인한다. |
Set entrySet() | Map에 저장된 key-value를 Map.Entry타입 객체로 저장한 Set으로 반환한다. |
boolean equals(Object o) | 동일한 Map인지 비교한다. |
Object get(Object key) | 지정한 key객체에 대응하는 value객체를 반환한다. |
int hashCode() | 해시코드를 반환한다. |
Object put(Object key, Object value) | Map에 key-value를 연결mapping하여 저장한다. |
void putAll(Map t) | 지정한 Map의 모든 key-value쌍을 추가한다. |
Object remove(Object key) | 지정한 key와 일치하는 key-value를 삭제한다. |
int size() | Map에 저장된 key-value쌍의 개수를 반환한다. |
Set keySet() | Map에 저장된 모든 key객체를 반환한다. |
Collection values() | Map에 저장된 모든 value객체를 반환한다. |
values()의 반환타입은 Collection.
KeySet()의 반환타입은 Set.
왜?
key는 중복을 허용하지 않으므로 Set으로 반환해도 문제가 없다.
하지만 value는 중복을 허용하기 때문에 Set으로 반환했을 경우 문제가 발생할 수 있다.
따라서 value는 Set이 아닌 Collection타입으로 반환한다.
Map인터페이스의 내부 인터페이스inner interface
Map인터페이스를 구현하는 클래스는 Map.Entry인터페이스도 함께 구현해야 한다.
메서드 | 설명 |
---|---|
boolean equals(Object o) | 동일한 Entry인지 비교한다. |
Object getKey() | Entry의 key객체를 반환한다. |
Object getValue() | Entry의 value객체를 반환한다. |
int hashCode() | Entry의 해시코드를 반환한다. |
Object setValue(Object value) | Entry의 value객체를 지정한 객체로 바꾼다. |