아틴
Atin
아틴
전체 방문자
오늘
어제
  • 분류 전체보기 (460)
    • Devlopment (246)
      • 정리 글 (20)
      • MicroServices (0)
      • Reactive, Concurrenc.. (12)
      • Java (44)
      • Spring (20)
      • C,C++,Ruby,Python (52)
      • Mobile (39)
      • Web (35)
      • Tip & Info (14)
      • Unit Test (7)
    • Infra (44)
      • OS (21)
      • RDBMS (13)
      • NoSQL&Cache (5)
      • AWS (4)
    • Computer Science (11)
    • Etc (156)

블로그 메뉴

  • Home
  • Guestbook

공지사항

인기 글

태그

  • C
  • 던젼 앤 드래곤즈
  • Ruby on Rails
  • Dungeons & Dragons
  • Linux
  • Python
  • mysql
  • 안드로이드
  • 아이폰
  • 정읍
  • 전라도
  • javascript
  • 자바
  • Android
  • TRPG
  • CSS
  • Java
  • jsp
  • 해킨토시
  • 여행

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아틴

Atin

Java 자료구조 비교
Computer Science

Java 자료구조 비교

2017. 9. 30. 08:16
반응형

여러가지 자료구조에 대한 비교를 해본다.


Array (배열)

  • 같은 데이터 타입에 대해 데이터를 한 곳에 저장해두고 하나의 변수를 가지고 사용하는 것을 말한다. 
  • 1차원배열과 다차원 배열이 존재
  • 장점
    • 간단하게 사용 가능
    • 인덱스 통해 빠르게 데이터 접근 가능
  • 단점
    • 저장 공간이 제한적
    • 동적 할당을 통해 새롭게 정의 가능하지만 데이터 이동을 또 해야함





Iterable

  • 이름 그대로 반복할 수 있는지 확인하는 인터페이스
  • 다음과 같은 abstract method를 갖음

 

 boolean hasNext () // 요소가 더 많은 경우 true를 반환합니다.

 E next () // 제네릭 타입 E의 다음 원소를 반환합니다.

 void remove () // 반복자가 반환 한 마지막 요소를 제거합니다.



Collection

  • 모든 콜렉션의 상위 인터페이스
  • Collection이 갖는 핵심 메소드를 선언
  • ex) add, contatin, remove, size, isEmpty, iterator 등


List

  • Collection 인터페이스를 확장한 자료형
  • 순서가 있음
  • 인덱스가 존재
  • 중복을 허용

Vector

Java 1.0 에서 추가

동기화 기능 제공

ArrayList와 거의 동일하지만 동기화 기능에서만 차이를 보임

ArrayList의 구현 버전


ArrayList

  • Java 1.2 에서 추가
  • 동기화 제공되지 않음
  • 내부적으로 데이터를 배열에서 관리
  • 데이터의 추가, 삭제를 위해 임시 배열을 생성해 데이터를 복사 하는 방법을 사용
  • 패키지 : java.util
  • 장점 : 검색이 빠름(각 데이터에 대한 인덱스를 가지고 있으므로)
  • 단점 : 대량 데이터 추가/삭제시 느림 (배열의 복사가 빈번하게 발생)


CopyOnWriteArrayList

  • ArrayList와 동일하지만 동기화 지원
  • 동기화를 지원하므로 ArrayList에 비해서는 느림
  • JDK 1.5에서 추가
  • ArrayList는 CopyOnWriteArrayList가 수행 할 수없는 동안 ConcurrentModificationException을 발생
  • package : java.util.concurrent


LinkedList

  • Java 1.2 에서 추가
  • 링크 기반 (데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태를 알고 있는 형태)
  • 장점 : 대량 데이터 추가/삭제가 빠름(위치 정보의 수정만으로 가능)
  • 단점 : 데이터가 많은 경우 검색이 느림 (순차적으로 모든 노드를 조회해야 함)


Stack

LIFO(Last In First Out)구조로 구현된 리스트

스택


Set

  • 중복을 허용하지 않음

HashSet

  • 데이터를 해쉬 테이블에 담는 클래스
  • 순서가 없음


LinkedHashSet

  • 해쉬 테이블에 데이터를 담음
  • 순서가 있음 : 저장된 순서


TreeSet

  • red-black이라는 트리에 데이터를 담음
  • 순서가 있음 : 값에 따라서 정해짐
  • HashSet보다 성능상 느림


Queue

  • FIFO(Firsh In First Out)구조로 구현된 리스트


PrioriryQueue

  • 큐에 추가된 순서와 상관없이 먼저 생성한 객체가 먼저 나옴


LinkedBlockingQueue

  • 선택적으로 저장할 데이터의 크기를 정할 수도 있는 FIFO 기반의 링크 노드를 사용
  • 블로킹 큐


ArrayBlockingQueue

  • 저장되는 데이터의 크기가 정해져 있는 FIFO 기반
  • 블로킹 큐


PriorityBlockingQueue

  • 저장되는 데이터의 크기가 정해져 있지 않음
  • 객체의 생성 순서에 따라서 순서가 저장
  • 블로킹 큐


DelayQueue

  • 큐가 대기하는 시간을 지정하여 처리하도록 되어 있는 큐


SynchronousQueue

  • put() 메소드를 호출하면, 다른 스레드에서 take() 메소드가 호출될 때까지 대기하도록 되어 있는 큐
  • 저장되는 데이터가 없음
  • API에서 제공하는 대부분의 메소드는 0이나 null을 리턴



Blocking Queue

크기가 지정되어 있는 큐에 공간이 더 이상 없을 때, 공간이 생길 때까지 대기하도록 만들어진 큐




Map

Key와 Value 쌍으로 저장되는 자료구조


Hashtable

  • 데이터를 해쉬 테이블에 담는 클래스입니다. 
  • 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있음
  • null 값을 허용하지 않음


HashMap

  • 데이터를 해쉬 테이블에 담는 클래스
  • null 값을 허용
  • 동기화 되어 있지 않음


ConcurrentHashMap

  • HashMap과 동일하지만 동기화 지원
  • JDK 1.5에서 지원
  • 동기화시 hashtable을 절체에 대해 lock을 걸지 않고 조각을 쪼개어 부분 부분 lock을 걸어 성능을 높임
  • null 값을 허용하지 않음
    • 동시성 처리를 위해서 null을 수용할 수 없음

TreeMap

  • red-black 트리에 데이터를 담음
  • 순서가 있음 : 키 값에 따라 정해짐


LinkedHashMap

  • HashMap과 거의 동일
  • 이중 연결 리스트(doubly-linkedlist)를 사용하여 데이터를 담음
  • 순서가 있음 : 넣는 순서에 따라 정해짐





Reference

[1] The Collection Framework https://www.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html


반응형
저작자표시 비영리 변경금지 (새창열림)

'Computer Science' 카테고리의 다른 글

JVM 메모리 구조 (JVM Memory structure)  (0) 2017.09.30
DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성  (0) 2017.09.30
OOP(객체 지향 프로그래밍) 5원칙 및 특성  (0) 2017.09.30
TCP vs UDP  (0) 2017.09.30
TCP 3 Way-Handshake & 4 Way-Handshake  (0) 2017.09.30
OSI 7 계층 (OSI 7 Layer)  (0) 2017.09.29
프로세스와 스레드(Process vs Thread)  (0) 2017.09.29
64비트와 32비트의 차이  (0) 2017.09.29
퀵 정렬, 퀵 소트(Quick Sort)  (0) 2017.09.21
계수정렬, 카운팅 소트(Counting Sort)  (0) 2017.09.21
    'Computer Science' 카테고리의 다른 글
    • DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성
    • OOP(객체 지향 프로그래밍) 5원칙 및 특성
    • TCP vs UDP
    • TCP 3 Way-Handshake & 4 Way-Handshake
    아틴
    아틴

    티스토리툴바