JAVA
[JAVA] Collection - 사용 방법
빙응이
2023. 11. 28. 20:03
📝 JAVA Collections Framework(JCF)
JAVA에서 컬렉션이란 데이터의 집합, 그룹을 의미한다.
JCF는 이러한 데이터, 자료구조인 컬렉션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공한다.
Collection 인터페이스는 크게 List, Set, Queue로 크게 3가지 상위 인터페이스로 분류할 수 있다.
여기서 Map은 Collection을 상속받지 않지만 Collection으로 분류된다.
인터페이스 | 구현클래스 | 특징 |
Set | HashSet TreeSet |
순서를 유지하지 않는 데이터의 집합으로 데이터 중복을 허용하지 않는다. |
List | LinkedList Vector ArrayList |
순서가 있는 데이터의 집합으로 데이터의 중복이 허용된다. |
Queue | LinkedList PriorityQueue |
List와 유사하나 FIFO 방식을 사용한다. |
Map | Hashtable HashMap TreeMap |
키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로, 순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않는다. |
자료구조 유형으로 정리하면
- List : 목록처럼 데이터를 순서에 따라 관리한다.
- Set : 중복이 허용되지 않는 데이터를 관리한다.
- Map : 데이터를 Key, Value로 짝을 이루어 관리한다.
- Queue : 데이터를 FIFO(First In First Out)방식으로 관리
- Stack : 데이터를 LIFO(Last In First Out 방식으로 관리
📝컬렉션의 특징
자바의 컬렉션들은 제네릭을 사용하여 구현한다.
public interface List<E> extends Collection<E> { ... }
List, Set, Queue는 공통부모로 Collection 인터페이스를 상속받고 있으며, Collection 인터페이스의 주요 메소드를 사용할 수 있다.
Collection 인터페이스 메소드
리턴 타입 | 메소드 | 용도 |
boolean | add(E e) | 현재 컬렉션에 데이터 객체 e를 추가 |
boolean | addAll(Collection<? extends E> c) | 현재 컬렉션에 컬렉션 c의 모든 데이터를 추가 |
boolean | contains(Object o) | 현재 컬렉션에 객체 o를 포함 여부 반환 |
boolean | remove(Object o) | 현재 컬렉션에서 객체 o를 삭제 |
boolean | removeAll(Collection <?> c) | 현재 컬렉션에서 c와 일치하는 데이터를 모두 삭제한다. |
boolean | retainAll(Collection <?> c) | 현재 컬렉션에서 컬렉션 c와 일치하는 데이터만 남기고 모두 삭제 |
void | clear() | 모든 데이터 삭제 |
int | size() | 데이터 개수 반환 |
boolean | isEmpty() | 비어있는지 반환 |
Object[] | toArray() | 저장된 데이터를 Object 배열로 반환 |
각 인터페이스의 특징
1. Set 인터페이스
- 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않음
- HashSet (순서가 중요하지 않는 경우 사용)
- 가장 빠른 임의 접근 속도
- 순서 예측이 불가능
- TreeSet (정렬된 순서로 데이터에 접근해야할 때 사용)
- 정렬방법 지정 가능
- HashSet (순서가 중요하지 않는 경우 사용)
2. List 인터페이스
- 순서가 있는 데이터의 집합으로 데이터의 중복이 허용된다.
- ArrayList (대부분의 상황에서 사용)
- 내부적으로 배열을 사용하여 구현
- 데이터의 빠른 검색이 가능, 데이터 추가/삭제에 효율적이다.
- LinkedList ( 삽입/ 삭제가 빈번한 상황에서 사용)
- 이중 연결 리스트로 구현
- 데이터의 중간에서의 삽입/삭제가 빠름
- Vector (동기화가 되어 있어 멀티스레드 환경에서 안전하게 사용가능)
- 동기화 기능
- ArrayList (대부분의 상황에서 사용)
3. Queue 인터페이스
- PriorityQueue
- 우선순위 큐를 구현한 클래스
- 우선순위에 따라 요소에 접근 가능
📝Map 인터페이스
Map은 컬렉션으로 취급되지만 컬렉션 인터페이스의 상속을 받지 않아 다른 방식으로 접근해야한다.
Map 메소드
리턴 타입 | 메소드 | 용도 |
void | put(Key, Value) | 메서드를 사용하여 특정 키에 값을 추가 |
Object | get(Key) | 키에 해당하는 값을 얻는다. |
Object | getOrDefault(Key,defaultValue) | 해당 키가 존재하지 않을 경우 기본값을 반환(null을 검사하지 않고 사용가능) |
boolean | containsKey(Key) | 키가 존재하는지 반환 |
boolean | containsValue(value) | 특정 값이 존재하는지 반환 |
Object | KeySet() | 해당 맵에 모든 키 값을 반환한다. 순회에서 사용 |
Object | values() | 해당 맵에 모든 값을 반환한다. 순회에서 사용 |
Map의 특징
- HashMap ( 순서가 중요하지 않는 키-값 구조에서 사용)
- 키-값 쌍을 저장하고 검색에 빠르다.
- 순서가 중요하지 않은 키- 값 쌍을 저장할 때 사용
- LinkedHashMap (삽입 ,액세스 순서가 중요할 때 사용)
- 해시 테이블과 연결 리스트를 사용하여 삽입 순서나 액세스 순서대로 키-값 쌍을 유지
- 일반적으론 사용하지 않는다.
- TreeMap (정렬된 순서로 접근해야 할 때 사용)
- 이진 검색 트리를 사용하여 키-값 쌍을 정렬된 상태로 유지
- 정렬된 순서로 키-값 쌍에 접근해야 할 때 사용한다.