-
[Java] 자바 컬렉션 프레임워크(Java Collections Framework)Java 2021. 11. 7. 03:36반응형
개요
다양한 알고리즘 문제를 접하게 되면서 문제를 이해하고 쉽게 푸는 측면에서와 시간 복잡도 측면에서 어떤 자료구조를 사용하는 것이 효율적인지 고민하게 되어서 JCF(java collections framework)에 대해 찾아보게 되었습니다.
Java Collections Framework(JCF)란 무엇일까?
배열을 사용하다가 보면 크기가 고정적이어서 메모리가 낭비되거나 크기를 넘어서게 될 때 데이터를 저장할 수 없어서 비효율적인 문제가 발생하는데 이를 해결하기 위해 자료구조를 바탕으로 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)할 수 있는 자료구조를 만들어 놓았으며 이 라이브러리를 컬렉션 프레임워크라고 합니다.
자바에서의 자료구조 유형
- 순서가 있는 목록인 List
- 순서가 중요하지 않은 목록인 Set
- 먼저 들어온 것이 먼저 나가는 Queue
- key-value의 형태로 저장되는 Map형
Java Collections Frameworks 상속 구조
JCF 상속구조 이제 상속 구조에 따라 좀 더 세부적으로 알아보도록 하겠습니다.
List 인터페이스
순서가 있는 데이터의 집합으로 데이터의 중복을 허용합니다.
ArrayList
단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어납니다.(random access)
index 중간에 값을 추가하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 뒤로 밀려나서 데이터가 늘어날 경우에 악영향을 미침 중간에 데이터를 insert 해야 할 경우가 많다면 ArrayList보다는 LinkedList 활용하면 좋습니다.
thread-safe 보장 안 함
LinkedList
양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치 정보만 수정하면 되기에 유용합니다.
하지만 인덱스가 없기에 특정 요소에 접근하기 위해서는 순차 탐색이 필요하여 탐색 속도가 떨어집니다.
thread-safe 보장 안 함
Vector
ArrayList와 동일한 내부구조를 가지며 차이점은 멀티 스레드가 동시에 이 메서드를 실행할 수 없어서 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있습니다.
스레드가 1개일 때도 항상 동기화하기 때문에 ArrayList보다 성능이 떨어집니다.
thread-safe 보장
Queue/Deque 인터페이스
선입선출 구조로 데이터를 넣은 순서대로 나오는 구조입니다.
Queue는 한 방향으로만 삽입 삭제가 가능하고 Deque는 양방향에서 접근이 가능합니다.
PriorityQueue
우선순위 큐로 우선순위가 높은 데이터가 먼저 나오는 원리입니다.
최댓값과 최솟값을 꺼내 놓을 때 매우 유용하게 사용될 수 있습니다.
LinkedList
일반적인 Queue 또는 Deque를 LinkedList로 생성하여 쓸 수 있습니다.
양방향 혹은 단방향으로 삽입 삭제가 가능하고 Rardom access가 불가능합니다.
Set 인터페이스
중복되는 데이터를 넣지 못한다는 특징을 가집니다.
HashSet
입력 순서를 보장하지 않고 순서도 보장하지 않습니다.
빠르게 중복되는 값인지만 찾으면 될 때 사용합니다.
삽입, 삭제, 색인이 매우 빠른 컬렉션입니다.
LinkedHashSet
중복은 허용하지 않으면서 순서를 보장받고 싶은 경우에 사용합니다.
TreeSet
가중치에 따른 순서대로 정렬된다. 중복은 허용하지 않으면서 특정 규칙에 의해 정렬된 형태의 집합을 쓰고 싶을 때 사용합니다.
다음은 간략하게 어떤 상황에서 어떤 자료구조를 쓰는지에 대한 그림입니다.
Map의 경우는 다루지 않았는데 맨 처음 질문에서 갈리게 됩니다.
간단하게 Map에 대해 말하자면 "키와 값이 쌍으로 이루어진 자료구조"를 의미합니다.
출처
Java에서 Collection이란?
Collection 이란? Collection 객체는 여러 원소들을 담을 수 있는 자료구조를 뜻한다 배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이라고 볼 수 있다. 자바에서
www.crocus.co.kr
https://coding-factory.tistory.com/550
[Java] 자바 컬렉션 프레임워크(List, Set, Map) 총정리
컬렉션 프레임워크란? 배열을 사용하다 보면 여러가지 비효율적인 문제가 생깁니다. 가장 큰 문제점은 크기가 고정적이라는 것입니다. 배열의 크기는 생성할 때 결정되며 그 크기를 넘어가게
coding-factory.tistory.com
https://gangnam-americano.tistory.com/41
[JAVA] Java 컬렉션(Collection) 정리
[JAVA] Java 컬렉션(Collection) 정리 ■ Java Collections Framework(JCF) Java에서 컬렉션(Collection)이란 데이터의 집합, 그룹을 의미하며 JCF(Java Collections Framework)는 이러한 데이터, 자료구조인 컬..
gangnam-americano.tistory.com
https://coding-factory.tistory.com/551
[Java] 자바 ArrayList 사용법 & 예제 총정리
ArrayList란? ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유
coding-factory.tistory.com
https://coding-factory.tistory.com/552?category=758267
[Java] 자바 LinkedList 사용법 & 예제 총정리
LinkedList란? 연결 리스트(LinkedList)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조입니다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노
coding-factory.tistory.com
https://coding-factory.tistory.com/553?category=758267
[Java] 자바 Vector 사용법 & 예제 총정리
Vector란? Vector는 ArrayList와 동일한 내부구조를 가지고 있습니다. ArrayList와 마찬가지로 Vector내부에 값이 추가되면 자동으로 크기가 조절되며 그다음 객체들은 한 자리씩 뒤로 이동됩니다. 하지만
coding-factory.tistory.com
https://st-lab.tistory.com/142
자바 [JAVA] - 자바 컬렉션 프레임워크 (Java Collections Framework)
아마 프로그래밍을 전공한다면 '자료구조'라는 단어를 들어본 적이 있을 것이다. 자료구조는 Data Structure라고 하는데, 직역하면 데이터 구조. 좀 더 자세하게 설명하자면 '일련의 일정 타입들의
st-lab.tistory.com
'Java' 카테고리의 다른 글
[Java ] String, Stringbuffer, Stringbuilder의 차이 및 장단점(+속도 비교) (0) 2021.11.09 [Java] 공식문서 보는 법 (0) 2021.11.07 [Java] Scanner 와 BufferedReader의 차이점 (0) 2021.11.05 [Java] equals 와 ==의 차이점 (0) 2021.11.03 [Java] 자바의 Hello World (0) 2021.10.29