본문 바로가기
Java

[JAVA] 컬렉션 프레임웍 (Collections Framework)

by 걸어가는 신사 2021. 9. 21.

1. 컬렉션 프레임웍 (Collections Framework)

데이터 군을 저장하는 클래스들을 표준화한 설계
  • 컬렉션은 다수의 데이터, 즉 데이터 그룹을 의미
  • 프레임웍은 표준화된 프로그래밍 방식을 의미
  • 컬렉션 프레임웍의 모든 컬렉션 클래스들은 List, Set, Map 중의 하나를 구현하고 있다.

인터페이스 구현 클래스 설명
List<E> ArrayList, LinkedList, Stack, Vector 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다.
Queue<E> LinkedList, PriorityQueue List와 유사
Set<E> HashSet, TreeSet 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않는다.
Map<K,V> HashMap, TreeMap, Hashtable,
Properties
키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없다.
이때 키는 중복을 허용하지 않지만, 값은 중복 허용한다.
Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임웍이 만들어지기 전(JDK1.2 이전)부터 존재
Vector나 Hashtable과 같은 기존의 컬렉션 클래스들은 호환을 위해, 설계를 변경해서 남겨두었지만 가능하면 사용하지 않는 것이 좋다.

그 대신 새로 추가된 ArrayList와 HashMap을 사용하자.

 

2. Collection Interface

List와 Set의 조상
  • Collection 인터페이스는 컬렉션 클래스에 저장된 데이터를 읽고, 추가하고 삭제하는 기본적인 메서드 정의

 

메서드 설명
boolean add(Object o)
boolean addAll(Collection c)
지정된 객체(o) 또는 Collection(c)의 객체들을 Collection에 추가한다.
void clear() Collection의 모든 객체를 삭제한다.
boolean contains(Object o)
boolean containsAll(Collection c)
지정된 객체(o) 또는 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에 포함된 객체들을 삭제한다.
boolean retainAll(Collection c) 지정된 Collection에 포함된 객체만을 남기고 다른 객체들은 Collection에서 삭제한다. 이 작업으로 인해 Collection에 변화가 있으면 true를 없으면 false를 반환한다.
int size() Collection에 저장된 객체의 개수를 반환한다.
Object[] toArray() Collection에 저장된 객체를 객체배열(Object[])로 반환한다.
Object[] toArray(Object[] a) 지정된 배열에 Collection의 객체를 저장해서 반환한다.

 

3. List Interface

순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.

List의 상속계층도

  • ArrayList
    • 빠르고 크기 조절이 자유롭다.
    • 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어나다. 
  • LinkedList
    • 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용하다.
    • 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰인다.
메서드 설명
void add(int index, Object element)
boolean addAll(int index, Collection c)
지정된 위치(Index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가한다.
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부터 toIndex)에 있는 객체 반환한다.
  • Collection 인터페이스로부터 상속받은 메서드는 제외.

 

4. Set Interface

순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.

Set의 상속계층도

  • HashSet
    • 가장 빠른 속도로 접근한다.
    • 순서를 예측할 수 없다.
  • TreeSet
    • 정렬방법을 지정할 수 있다.

 

5. Map Interface

Key, Value의 쌍으로 이루어진 데이터의 집합,
순서가 없고, Key는 중복을 허용하지 않고, Value는 중복을 허용한다.
  • 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게된다.

Map의 상속계층도

  • Hashtable
    • 느리지만 동기화 락을 통해 무결성을 보장한다, 그러므로 안정성과 신뢰성이 높다.
    • Key와 Value에 null이 허용되지 않는다.
  • HashMap
    • 속도가 빠르지만 동기화 보장하지 않는다, 그러므로 안정성과 신뢰성이 떨어진다.
    • 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
  • TreeMap
    • 정렬된 순서대로 Key와 Value을 저장하여 검색이 빠르다.
    • 저장할 때 오름차순으로 정렬한다.
메서드 설명
void clear() Map의 모든 객체를 삭제한다.
boolean containsKey(Object key) 지정된 key객체와 일치하는 Map의 key객체가 있는지 확인한다.
boolean containsValue(Object value) 지정된 value객체와 일치하는 Map의 value객체가 있는지 확인한다.
Set entrySet() Map에 저장되어 있는 key-value쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환한다.
boolean equals(Object o) 동일한 Map인지 비교한다.
Object get(Object key) 지정한 key객체에 대응하는 value객체를 찾아서 반환한다.
int hashCode() 해시코드를 반환한다.
boolean isEmpty() Map이 비어있는지 확인한다.
Set KeySet() Map에 저장된 모든 key객체를 반환한다.
Object put(Object key, Object value) Map에 value객체를 key객체에 연결(mapping)하여 저장한다.
void putAll(Map t) 지정된 Map의 모든 key-value쌍을 추가한다.
Object remove(Object key) 지정한 key객체와 일치하는 key-value쌍의 개수를 반환한다.
int size() Map에 저장된 key-value쌍의 개수를 반환한다.
Collection values() Map에 저장된 모든 value객체를 반환한다.
  • values() 메서드에서 값(value)은 중복을 허용하기 때문에 Collection타입으로 반환한다.
  • ketSet() 메서드에서 키(key)는 중복을 허용하지 않기 때문에 Set타입으로 반환한다.

 

* Map.Entry Interface

Map.Entry 인터페이스는 Map인터페이스의 내부 인터페이스이다. 
  • Map에 저장되는 key-value쌍을 다루기 위해 내부적으로 Entry인터페이스를 정의해 놓았다.
  • 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객체를 지정된 객체로 바꾼다.
반응형

댓글