Search

Java Collection 시간 복잡도 정리

Tags
Java
Date
2023/10/02

개요

알고리즘 문제를 풀 때 고려해야 할 사항 중 하나는 시간 초과를 피하는 것입니다. 이를 위해서 어떤 자료구조가 어떤 시간 복잡도를 가지고 있는지 충분히 학습해야 합니다. 오늘 포스팅에서는 Java Collection 시간 복잡도를 정리해보겠습니다.

List

ArrayList

시간복잡도 add : O(1) remove : O(n) get : O(1) Contains : O(n) iterator.remove : O(n) java 1.2에 추가, thread-safe 보장 안함 특징 : 데이터 추가,삭제를 위해 임시 배열을 생성해 데이터를 복사 - 대량의 자료를 추가/삭제시 복사가 일어 나게 되어 성능 저하를 일이킴 - 데이터의 인덱스를 가지고 있어 데이터 검색시 빠름
Plain Text
복사

LinkedList

시간복잡도 add : O(1) remove : O(1) get : O(n) Contains : O(n) iterator.remove : O(1) java 1.2에 추가, thread-safe 보장 안함 특징 : 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있다. - 데이터 추가/삭제시 빠름 - 데이터 검색시 처음부터 노드를 순화해야 되기 때문에 느림
Plain Text
복사

CopyOnWriteArrayList

시간복잡도 add : O(n) remove : O(n) get : O(1) Contains : O(n) iterator.remove : O(n) java 1.5 추가 thread-safe 보장, 병렬처리 특징 : 처리에 여분의 오버로드를 가져오지만 순회 작업의 수에 비해 수정 횟수가 최소일때 효과적 이다. - add는 ArrayList, LinkedList 보다 느리지만 get은 LinkedList보단 빠르고 ArrayList보단 살짝 느리다.
Plain Text
복사

Set

HashSet

시간복잡도 add : O(1) contains : O(1) next : o(h/n) h는 테이블 용량 java 1.2 thread-safe 보장 안함 특징 : 객체들을 순서없이 저장하고 동일한 객체를 중복 저장하지 않는다. - 중복되지 않는 값을 등록할때 용의 - 순서없이 저장되는것 주위 - null을 허용한다.
Plain Text
복사

LinkedHashSet

add : O(1) contains : O(1) next : O(1) java 1.4 thread-safe 보장 안함 특징 : 속도는 hashSet에 비해 느리지만 좋은 성능을 보장한다. - 등록한 순으로 정렬을 한다. - null을 허용한다.
Plain Text
복사

CopyOnWriteArraySet

시간복잡도 add : O(1) contains : O(1) next : O(1) Java 1.5 에서 나옴 특징 : 적은 메모리를 사용 - 빠르다 - null을 사용 할 수 없다.
Plain Text
복사

TreeSet

add : O(log n) contains : O(log n) next : O(long n) java 1.2 에서 나옴 thread-safe 보장 안함 특징 : 객체기준으로 정렬을 한다. 느리다. - null을 허용하지 않는다.
Plain Text
복사

ConcurrentSkipListSet

add : O(log n) contains : O(log n) next : O(1) java 1.6 병렬처리, thread-safe 보장, 병렬 보장 특징 : Null을 허용하지 않는다. - Tree set 처럼 정렬을 한다.
Plain Text
복사

Map

HashMap

get : O(1) containsKey : O(1) next : O(h/n) h는 테이블 용량 java 1.2 에서 나옴 특징 : 순서에 상관없이 저장됨, Null을 허용한다. thread-safe 보장하지 않는다.
Plain Text
복사

LinkedHashMap

get : O(1) containsKey : O(1) next : O(1) java 1.4 에서 나옴 특징 : 순서대로 등록한다. Null을 허용한다. thread-safe 보장하지 않는다.
Plain Text
복사

IdentityHashMap

get : O(1) containsKey : O(1) next : O(h/n) H는 테이블 java 1.4 에서 나옴 특징 : Map 형식에 부합되지 않음
Plain Text
복사

EnumMap

get : O(1) containsKey : O(1) next : O(1) java 1.5 에서 나옴
Plain Text
복사

TreeMap

get : O(log n) containsKey : O(log n) next : O(log n) java 1.2 에서 나옴 특징 : 정렬이 되면서 추가가 됨 - null은 허용하지 않음 - thread-safe 보장하지 않는다.
Plain Text
복사

ConcurrentHashMap

get : O(1) containsKey : O(1) next : O(h/n) h는 테이블 java 1.5 에서 나옴 특징 : thread-safe 보장하면서 SynchronizedMap 보다 속도가 빠르다 - null을 허용하지 않음
Plain Text
복사

ConcurrentSkipListMap

get : O(log n) containsKey : O(log n) next : O(1) java 1.6 에서 나옴 특징 : thread-safe 보장하면서 SynchronizedMap 보다 속도가 빠르다 - 메모리를 사용하여 O(log n)으로 데이터를 검색, 삽입, 삭제가 가능하다 - lock이 적게 사용되어야 하는 병렬 처리 시스템에 용의
Plain Text
복사

Queue

PriorityQueue

offer(입력) : O(log n) peek(get) : O(1) poll(반환) : O(log n) size : O(1) natural order : JVM에서 제공하는 일반적인거와 다를수 있음 순서 ex) 문자는 ASCII 순서로 정렬 java 1.5 에서 나옴 특징 : 일반적은 큐는 FIFO의 구조를 가지지만 자연 네추럴 오더에 따라 정렬 - Null을 허용하지 않는다.
Plain Text
복사

ConcurrentLinkedQueue

offer     : O(1) peek     : O(1) poll     : O(1) size     : O(n) java 1.5 에서 나옴 thread-safe 보장(결과에 문제가 발생할 여지 있음) 특징 : FIFO 방식 Queue  - 데이터/추가/삭제가 빠름 - size는 O(1)이 아니다. - null을 허용하지 않는다.
Plain Text
복사

ArrayBlockingQueue

offer     : O(1) peek     : O(1) poll     : O(1) size     : O(1) java 1.5에서 나옴 특징 - 고정배열에 일반적인 Queue(FIFO) - 배열이 고정된 사이즈, 생성되면 변경 안됨
Plain Text
복사

LinkedBlockingQueue

offer     : O(1) peek     : O(1) poll     : O(1) size     : O(1) java 1.5 에서 나옴 특징 : FIFO 정렬 - 크기를 지정하지 않을 경우 Integer.MAX_VALUE와 동일하게 생성됨 - 삽입이 동적임
Plain Text
복사

PriorityBlockingQueue

offer     : O(log n) peek     : O(1) poll     : O(log n) size     : O(1) java 1.5 에서 나옴 특징 : PriorityQueue 와 같은 정렬식으로 저장 - 논리적으로 한대로 추가 가능 - 자원이 고갈되면 OOM 발생
Plain Text
복사

DelayQueue

offer     : O(log n) peek     : O(1) poll     : O(log n) size     : O(1) java 1.5 에서 나옴 특징 : 지연이 만료 되었을 때문 요소를 가져올수있다.
Plain Text
복사

ArrayDeque

offer     : O(1) peek     : O(1) poll     : O(1) size     : O(1) java 1.6에서 나옴 특징 : 양 측면에서 요소를 추가하거나 제거 할수 있는 확장 가능한 배열의 특별한 종류
Plain Text
복사

LinkedBlockingDeque

offer     : O(1) peek     : O(1) poll     : O(1) size     : O(1) java 1.6 특징 : 무제한으로 인스턴스화 할수 있음
Plain Text
복사