본문 바로가기
자바/자바 자료구조

자바에서 사용할 수 있는 자료구조의 종류

by 신재은👩🏼‍💻 2024. 4. 14.

자바에서 사용할 수 있는 자료구조는 크게 자바 표준 라이브러리의 일부인 Java Collections Framework (JCF)와 그 외 추가적인 자료구조들로 나눌 수 있다.

 

콜렉션부터 보자.

주요 콜렉션 인터페이스와 그를 구현한 클래스는 다음과 같다.

 

  1. List - 순서가 있고 중복을 허용하는 컬렉션:
    1. ArrayList: 배열 기반의 리스트로, 인덱스를 통한 빠른 접근이 가능하다.
    2. LinkedList: 이중 연결 리스트로, 요소의 추가와 제거가 빈번할 때 유용합니다. <- doubly linked list라고 되어 있지 않지만 실제로 이중 연결 리스트 구조로 구현되어 있다(고 한다). 공부하면서 다 다룰 내용이니까 지금은 그냥 가볍게 넘어가도 된다.
    3. Vector: 스레드 안전을 제공하는 동기화된 리스트입니다.
    4. Stack: LIFO 데이터 구조를 제공하는 Vector의 하위 클래스입니다.
  2. Set - 중복을 허용하지 않는 컬렉션:
    1. HashSet: 해시 테이블을 사용하여 요소를 저장합니다. * 해시테이블 == 키:값, 그런데 HashSet은 키만 있다. 값에는 더미 데이터가 들어간다. Hash 함수를 사용해 데이터가 저장될 장소(인덱스)를 정하기 때문에 요소 순서가 없다.
    2. LinkedHashSet: HashSet의 순서 유지 버전입니다.
    3. TreeSet: 레드-블랙 트리 기반으로 요소가 정렬된 상태로 저장됩니다.
  3. Queue - FIFO 데이터 구조를 제공:
    1. LinkedList: Deque 인터페이스도 구현하며, 큐의 기능을 제공합니다.
    2. PriorityQueue: 요소들을 우선순위에 따라 정렬하여 저장합니다.
  4. Deque - 양방향 큐:
    1. ArrayDeque: 배열 기반의 더블 엔디드 큐로, 스택과 큐의 기능을 모두 제공합니다.
    2. LinkedList: Deque 인터페이스의 구현체로, 양방향으로 요소의 추가와 제거가 가능합니다.
  5. Map - 키와 값의 쌍으로 데이터를 저장하는 구조: <- 어? 아까 해시테이블이 키:값이라며? 이에 대해 굉장히 자세하고 많은 설명이 있는데 지금 내가 읽어도 이해가 잘 안 된다. 뒤의 내용을 알아야 제대로 분간할 수 있을 것 같으니 일단 넘어가자.
    1. HashMap: 해시 테이블을 사용하여 키에 대한 값의 매핑을 저장합니다.
    2. LinkedHashMap: HashMap과 유사하지만, 요소의 삽입 순서를 유지합니다.
    3. TreeMap: 레드-블랙 트리 기반으로 키가 정렬된 상태로 저장됩니다.
    4. Hashtable: HashMap과 유사하지만 스레드 안전을 제공합니다.

이거 말고 더 쓸 수 있는 게 있나요?

 

네.

 

자바 표준 라이브러리인 자바 콜렉션 프레임워크 말고도 자바로 구현할 수 있는 유용한 자료구조들이 있다.

 

  • 그래프: 단, 자바에서는 직접 그래프 데이터 구조를 구현해야 한다. 노드와 엣지를 사용하여 그래프를 표현하며, 이를 위해 인접 리스트나 인접 행렬을 사용할 수 있다.
  • 트라이(Trie): 문자열 검색을 최적화하는 트리 기반 자료구조.
  • 힙(Heap): PriorityQueue에 의해 내부적으로 사용되지만, 최대 힙과 같은 다른 종류의 힙은 직접 구현할 수 있다.
  • 이진 검색 트리(BST): TreeSet과 TreeMap에서 내부적으로 사용되지만, 사용자 정의 데이터 처리를 위해 직접 구현할 수 있다.

 자, 이제 이런 것들을 가지고 코테를 풀면 된다!!!