자바에서 사용할 수 있는 자료구조는 크게 자바 표준 라이브러리의 일부인 Java Collections Framework (JCF)와 그 외 추가적인 자료구조들로 나눌 수 있다.
콜렉션부터 보자.
주요 콜렉션 인터페이스와 그를 구현한 클래스는 다음과 같다.
- List - 순서가 있고 중복을 허용하는 컬렉션:
- ArrayList: 배열 기반의 리스트로, 인덱스를 통한 빠른 접근이 가능하다.
- LinkedList: 이중 연결 리스트로, 요소의 추가와 제거가 빈번할 때 유용합니다. <- doubly linked list라고 되어 있지 않지만 실제로 이중 연결 리스트 구조로 구현되어 있다(고 한다). 공부하면서 다 다룰 내용이니까 지금은 그냥 가볍게 넘어가도 된다.
- Vector: 스레드 안전을 제공하는 동기화된 리스트입니다.
- Stack: LIFO 데이터 구조를 제공하는 Vector의 하위 클래스입니다.
- Set - 중복을 허용하지 않는 컬렉션:
- HashSet: 해시 테이블을 사용하여 요소를 저장합니다. * 해시테이블 == 키:값, 그런데 HashSet은 키만 있다. 값에는 더미 데이터가 들어간다. Hash 함수를 사용해 데이터가 저장될 장소(인덱스)를 정하기 때문에 요소 순서가 없다.
- LinkedHashSet: HashSet의 순서 유지 버전입니다.
- TreeSet: 레드-블랙 트리 기반으로 요소가 정렬된 상태로 저장됩니다.
- Queue - FIFO 데이터 구조를 제공:
- LinkedList: Deque 인터페이스도 구현하며, 큐의 기능을 제공합니다.
- PriorityQueue: 요소들을 우선순위에 따라 정렬하여 저장합니다.
- Deque - 양방향 큐:
- ArrayDeque: 배열 기반의 더블 엔디드 큐로, 스택과 큐의 기능을 모두 제공합니다.
- LinkedList: Deque 인터페이스의 구현체로, 양방향으로 요소의 추가와 제거가 가능합니다.
- Map - 키와 값의 쌍으로 데이터를 저장하는 구조: <- 어? 아까 해시테이블이 키:값이라며? 이에 대해 굉장히 자세하고 많은 설명이 있는데 지금 내가 읽어도 이해가 잘 안 된다. 뒤의 내용을 알아야 제대로 분간할 수 있을 것 같으니 일단 넘어가자.
- HashMap: 해시 테이블을 사용하여 키에 대한 값의 매핑을 저장합니다.
- LinkedHashMap: HashMap과 유사하지만, 요소의 삽입 순서를 유지합니다.
- TreeMap: 레드-블랙 트리 기반으로 키가 정렬된 상태로 저장됩니다.
- Hashtable: HashMap과 유사하지만 스레드 안전을 제공합니다.
이거 말고 더 쓸 수 있는 게 있나요?
네.
자바 표준 라이브러리인 자바 콜렉션 프레임워크 말고도 자바로 구현할 수 있는 유용한 자료구조들이 있다.
- 그래프: 단, 자바에서는 직접 그래프 데이터 구조를 구현해야 한다. 노드와 엣지를 사용하여 그래프를 표현하며, 이를 위해 인접 리스트나 인접 행렬을 사용할 수 있다.
- 트라이(Trie): 문자열 검색을 최적화하는 트리 기반 자료구조.
- 힙(Heap): PriorityQueue에 의해 내부적으로 사용되지만, 최대 힙과 같은 다른 종류의 힙은 직접 구현할 수 있다.
- 이진 검색 트리(BST): TreeSet과 TreeMap에서 내부적으로 사용되지만, 사용자 정의 데이터 처리를 위해 직접 구현할 수 있다.
자, 이제 이런 것들을 가지고 코테를 풀면 된다!!!
'자바 > 자바 자료구조' 카테고리의 다른 글
[묘공단] 스택 이야기 (0) | 2024.04.22 |
---|---|
자바 - List - ArrayList 뽀개기 - 2 (0) | 2024.04.14 |
자바 - List - ArrayList 뽀개기 - 1 (0) | 2024.04.14 |
자바 자료구조 학습 중 궁금한 점 (0) | 2024.04.14 |
자바 자료구조 개요 (0) | 2024.04.13 |