Java Collection Framework (JCF)
JCF란?
- 자바 컬렉션 프레임워크란 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
- 예를들어 List, Stack, Queue, Tree, Hash, 버블 정렬, 퀵 정렬, 이진 탐색 등은 제네릭 기반의 클래스와 메소드로 미리 구현 되어 있다.
- 컬렉션 프레임워크에서는 데이터를 저장하는 자료 구조에 따라 위와 같이 핵심이 되는 몇가지 주요 인터페이스를 정의하고 있다.
🔌 List 인터페이스
- List
인터페이스를 구현하는 컬렉션 클래스들이 갖는 공통적인 특성 2가지는 다음과 같다. - 인스턴스의 저장 순서를 유지한다.
- 동일한 인스턴스의 중복 저장을 허용한다.
ArrayList 클래스
- 배열 기반 자료구조, 배열을 이용하여 인스턴스 저장
- 내부적으로 배열을 생성해서 인스턴스를 저장한다.
- 필요하면 내부적으로 배열을 더 큰 배열로 교체한다.
- 내부적으로 배열 저장 공간을 늘리는 과정에서 시간이 비교적 많이 소모된다.
- 배열 중간에 원소를 삽입, 삭제할 경우 내부 원소들을 한 칸 씩 옮겨야하는 단점이 있다.
- 하지만 인덱스로 저장된 인스턴스를 빠르게 참조할 수 있다.
LinkedList 클래스
- 리스트 기반 자료구조, 리스트를 구성하여 인스턴스 저장
- 저장된 인스턴스의 참조 과정이 배열에 비해 복잡하다. (앞에서부터 순차적으로 접근해야함) 따라서 느릴 수 있다.
- 저장 공간을 늘리는 과정이 간단하다.
- 저장된 인스턴스의 삭제 과정이 단순하다.
Vector 클래스
Stack 클래스
🔌 Queue 인터페이스
PriorityQueue 클래스
🔌 Deque 인터페이스
ArrayDeque 클래스
🔌 Set 인터페이스
- Set
인터페이스를 구현하는 컬렉션 클래스들이 갖는 공통적인 특성 2가지는 다음과 같다. - 저장 순서가 유지되지 않는다.
- 데이터의 중복 저장을 허용하지 않는다.
HashSet 클래스
- HashSet
클래스는 데이터의 중복 저장이 허용되지 않는다. 어떻게 인스턴스의 중복을 판단할까? - HashSet
클래스는 Object 클래스에 정의되어 있는 equals와 hashcode 메서드의 호출 결과를 근거로 인스턴스의 중복을 판단한다. - 내부적으로 먼저 hashcode를 호출해서 값이 같은지 확인한다. 같다면, equals로 한 번 더 비교한다.
- hashcode 값이 같다는 것은 해쉬 충돌이 일어났다는 것이며, 이 경우 equals로 한 번 더 비교를 하는 것이다.
LinkedHashSet 클래스
- 중복을 허용하지 않고, 저장 순서대로 인스턴스를 저장한다.
🔌 SortedSet 인터페이스
TreeSet 클래스
- TreeSet
클래스는 트리라는 자료구조를 기반으로 인스턴스를 저장한다. - 이는 정렬된 상태가 유지되면서 인스턴스가 저장됨을 의미한다. 기본적으로 오름차순으로 정렬되며 인스턴스가 저장된다.
정렬 기준 바꾸는 법
-
TreeSet
에 들어갈 클래스가 Comparable 인터페이스를 구현한다. -
또는 comparator
인터페이스를 구현하는 클래스의 인스턴스를 TreeSet의 생성자에 넘겨준다. 즉, 정렬 기준을 생성자를 통해 넘겨준다. public TreeSet(Comparator<? Super E> comparator)
🔌 Map<K, V> 인터페이스
HashTable 클래스
HashMap 클래스
LinkedHashMap 클래스
🔌 SortedMap 인터페이스
TreeMap 클래스
참고
- https://jobjava00.github.io/language/java/basic/collections/