본문 바로가기

Backend Study/Java

[JAVA] 컬렉션 프레임워크

1. 컬렉션 프레임워크란?

컬렉션:  여러 객체를 모아놓은 것을 의미한다. 

프레임워크: 표준화, 정형화된 체계적인 프로그래밍 방식이다.

컬렉션 프레임워크: 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해둔 것이다. 

 

일반 배열과 가장 큰 차이점은 정적 메모리 할당이 아닌 동적 메모리 할당 방식으로, 공간이 필요한만큼 추가할 수 있다는것이다.

2. 컬렉션 프레임워크의 핵심 인터페이스

List: 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. 

구현 클래스: ArrayList, LinkedList, Stack, Vector

순서 O, 중복 O

 

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

구현 클래스: HastSet, TreeSet

순서 X, 중복 X

 

Map: key-value 쌍으로 이루어진 데이터의 집합

구현 클래스:  HashMap, TreeMap

순서 X, 중복 (키 X, 값 O)

 

자바 컬렉션 프레임워크의 상속 구조이다.

3. List Interface

ArrayList:

동적 배열을 제공한다. 표준 배열보다 느릴 수 있지만 많은 움직임이 필요한 프로그램에서 유용하다.

최대 장점은 개체를 추가, 삭제 시 ArrayList 크기가 자동으로 조정된다는 것이다.

단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어나다. 

ArrayList<Integer> arrList = new ArrayList<Integer>();

 

LinkedList:

요소가 연속된 위치에 저장되지 않고 모든 요소가 데이터 부분과 주소 부분이 있는 별도의 객체에 저장된다. 

양방향 포인터 구조로 데이터 삽입, 삭제가 빈번할 경우 성능이 좋다. 검색이 느리다는 단점이 있다.

스택, 큐, 양방향 큐 등을 만들때 사용된다.

LinkedList<Integer> linkedList = new LinkedList<Integer>();

 

Vector:

대용량 처리에 유리하다. 성능이 떨어지고 무거워서 잘 사용하지 않는다.

 

3. Set Interface

HashSet:

가장 빠른 임의 접근 속도, 순서를 예측할 수 없다.

TreeSet:

정렬방법을 지정할 수 있다. (기본은 오름차순 정렬)

LinkedHashSet:

입력된 순서대로 저장한다.

 

4. Map Interface

HashTable:

HashMap보다 느리지만 동기화 지원

Null 불가

HashMap:

중복과 순서가 허용되지 않으며 null값이 올 수 있다.

HashMap <String, String> map = new HashMap <String, String>();

TreeMap:

키와 값을 저장하는 동시에 키를 정렬한다.

키가 정렬되어 저장되기 때문에 검색 시 빠르다.

TreeMap <String, String> treeMap = new TreeMap <String, String>();

참고) 

https://gangnam-americano.tistory.com/41