본문 바로가기

자바

JAVA Collection

Collection이란

우리가 흔히 자바를 통해서 프로그래밍을 진행하다보면 다양한 자료구조를 사용한다.

우리는 자료구조를 사용하기 위해 당연스럽게 Collection에 있는 List, Set, Map 등을 꺼내 사용해온다.

이번 포스트에서는 이 Java Collection Framework에 대해서 살펴보려고 한다.

Collection은 흔히 배열과 비교될 수 있다.

배열은 우리가 생성할 때 크기를 설정하여 정적으로 생성한다.

그에 따라, 우리가 배열의 크기는 사용하지 않더라도 이미 할당된 상태이고 배열의 크기가 부족할지라도 더이상 저장이 불가능하다.

위에서 말한 것과 비슷한 맥락이지만 우리가 배열 안의 데이터를 삭제하더라도 이미 배열의 메모리는 할당되어 있는 상태이다.

그에 비해, 컬렉션은 사이즈가 정해지지 않고 동적으로 할당되어진다.

그래서 중간에 데이터를 삭제하면 할당된 메모리를 제거할 수 있다.

이러한 배열과의 차이점이 컬렉션을 사용하게 만든다.

그렇다면, 컬렉션에 대해서 자세히 살펴보자.

Collection 구조

List

List를 구현하는 클래스들은 인덱스 순서에 따라 데이터가 저장되고 데이터의 중복 저장이 가능하다.

순서에 따라 저장하기에 순서를 유지한다.

  1. LinkedList
    • 양방향 포인터 구조로 인접 참조를 링크해서 체인처럼 관리한다.
    • 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 상당히 효율적이다.
  2. ArrayList
    • 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 매우 뛰어나다.
    • 저장 용량을 초과하면 자동적으로 메모리를 추가로 할당하여 저장한다.
  3. Vector
    • 과거에 대용량 처리를 위해 사용했다.
    • ArrayList와 같은 구조를 가지고 있다.
    • 동기화된 메서드로 구성되어 있어 멀티 쓰레딩 구조에 안정적이나 비교적 성능이 좋지 않고 무겁다.

Set

Set을 구현하는 클래스들은 순서를 유지하지 않고 데이터를 저장하며 중복된 데이터의 저장이 불가능하다.

  1. HashSet
    • 순서가 필요없는 데이터를 HashTable에 저장하며, Set 중 가장 높은 성능을 보인다.
  2. TreeSet
    • 저장된 데이터의 값에 따라 정렬되며 Red-Black Tree 타입으로 값이 저장되고 HashSet보다 성능이 느리다.

Map

Map을 구현하는 클래스들은 키(Key)와 값(Value)을 동시에 저장한다. 키는 중복 저장이 불가능하다.

  1. HashMap
    • 중복과 순서가 허용되지 않으며 null 값이 올 수 있다.
  2. TreeMap
    • 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠르다.
  3. HashTable
    • HashMap보다는 느리지만 동기화 지원

'자바' 카테고리의 다른 글

JAVA Enum  (0) 2021.10.17
JAVA Generic  (0) 2021.10.16
JAVA Lambda, Functional Interface  (0) 2021.10.14
JAVA Exception  (0) 2021.10.13
Java Optional  (1) 2021.10.04