Collection Framework
Java Collection Framework는 데이터를 효율적으로 관리하고 조작하기 위한 표준화된 자료구조와 알고리즘의 집합입니다. 이를 통해 개발자는 복잡한 자료구조를 직접 구현할 필요 없이 최적화된 구현체를 사용하여 애플리케이션의 생산성과 유지 보수성을 높일 수 있습니다.
Collection Framework는 다음으로 구성됩니다.
- Collection interfaces 프레임워크의 기반을 형성하는 다양한 인터페이스들의 집합
ex) Set, List, Map - General-purpose implementations : Collection Interfaces의 구현체
ex) ArrayList, HashSet, HashMap - Legacy implementations : 초기 (Java 2 이전) 컬렉션 클래스
ex) Vector , HashTable - Special-purpose implementations : 특정 상황에 최적화된 구현체
ex) EnumSet , EnumMap - Concurrent implementations : 멀티스레드 환경에서 안전한 컬렉션 구현체
ex) ConcurrentHashMap , CopyOnWriteArrayList - Wrapper implementations : 기존 컬렉션에 동기화, 불변성을 추가한 래퍼 클래스
ex) Collections.synchronizedList() , Collections.unmodifiableList() - Convenience implementations
- Abstract implementations
- Algorithms : 정렬 등 유용한 기능을 수행하는 Collections의 정적 메서드
ex) Collections.sort(), Collections.reverse() - Infrastructure : 컬렉션을 프레임워크를 지원하는 핵심 인터페이스와 구성 요소
ex) Iterator, Iterable - Array Utilities : 배열과 관련된 유틸리티 제공하는 Arrays의 정적 메서드
ex) Arrays.sort(), Arrays.copyOf()
Collection Interface
Java의 Collection Interface는 크게 두 가지 그룹으로 나뉩니다.
1️⃣ java.util.Collection기반의 인터페이스
데이터를 단일 요소로 관리합니다.
- List : 순서를 유지하며 중복을 허용하는 요소의 집합
- Queue : FIFO 큐
- Deque : 양방향 큐
- Set : 중복되지 않는 요소의 집합
- SortedSet : 정렬된 순서를 가지는 집합
2️⃣ java.util.Map기반의 인터페이스
단일 요소가 아닌, 식별 가능한 Key와 Value를 쌍으로 저장하고 관리하는 인터페이스
- SortedMap: 키가 정렬된 맵
⚠️ Map은 컬렉션 인터페이스를 상속받지 않는 독립적인 인터페이스이다.
💡 컬렉션 뷰를 통해 간접적으로 컬렉션 인터페이스의 기능을 구현한 것처럼 동작한다.
컬렉션 뷰
Map 데이터 구조를 다른 컬렉션 프레임워크 자료구조와 호환될 수 있는 형태로 변환하는 메서드
주요 컬렉션 뷰 메서드
- keySet(): Set<K>를 반환하여 모든 키를 관리
- values(): Collection<V>를 반환하여 모든 값을 관리
- entrySet(): Set<Map.Entry<K, V>>를 반환하여 모든 키-값 쌍을 관리
이를 통해 Map 데이터는 컬렉션 인터페이스와 유사한 방식으로 동작할 수 있습니다
General-purpose implementations
다음은 인터페이스 와 구현체 , 래거시간 관계를 트리 구조로 나타낸 것이다.
- Collection
- List
- ArrayList
- LinkedList
- ArrayDeque
- Vector → ArrayList
- Stack → Deque
- Queue
- PriorityQueue
- Deque
- ArrayDeque
- Set
- HashSet
- LinkedHashSet
- SortedSet
- TreeSet
- List
- Map
- HashMap
- LinkedHashMap
- HashTable → HashMap
- SortedMap
- TreeMap
Algorithms
컬렉션 프레임워크는 데이터를 정렬하거나 조작하는 데 유용한 알고리즘 메서드를 제공합니다. 주요 메서드는 다음과 같습니다:
- Collections.sort(): List 구현체의 요소를 정렬
- Collections.reverse(): List의 요소를 역순으로 정렬
- Collections.shuffle(): List의 요소를 임의로 섞기
- Collections.min(), Collections.max(): 컬렉션에서 최소/최대 값을 반환
- Collections.binarySearch(): 정렬된 리스트에서 이진 검색 수행
Infrastructure
Iterator는 컬렉션의 요소를 순차적으로 순회하는 도구이며, Iterable은 이를 지원하기 위한 인터페이스입니다.
모든 컬렉션 클래스는 Iterable을 구현하여 for-each 루프에서 사용할 수 있습니다.
import java.util.*;
public class InfrastructureExample {
public static void main(String[] args) {
// List 생성
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// Iterator를 이용한 순회
Iterator<String> iterator = names.iterator();
System.out.println("Using Iterator:");
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// Iterable 사용 (for-each 루프)
System.out.println("Using Iterable:");
for (String name : names) {
System.out.println(name);
}
}
}
Array Utilities
Java의 Arrays 클래스는 배열에 대한 다양한 유틸리티 메서드를 제공합니다. 다음은 Arrays 클래스의 주요 메서드 사용 예제입니다:
import java.util.Arrays;
public class ArrayUtilitiesExample {
public static void main(String[] args) {
// 배열 생성
int[] numbers = {5, 2, 8, 1, 3};
// 배열 정렬
Arrays.sort(numbers);
System.out.println("Sorted Array: " + Arrays.toString(numbers));
// 배열 복사
int[] copiedArray = Arrays.copyOf(numbers, 7); // 크기 확장
System.out.println("Copied Array: " + Arrays.toString(copiedArray));
// 배열 비교
int[] anotherArray = {1, 2, 3, 5, 8};
System.out.println("Arrays are equal: " + Arrays.equals(numbers, anotherArray));
// 배열 채우기
Arrays.fill(copiedArray, 5, 7, 0); // 인덱스 5~6 채우기
System.out.println("Filled Array: " + Arrays.toString(copiedArray));
}
}
'Dev' 카테고리의 다른 글
[Python] * 연산의 오해와 진실, 얕은/깊은 복사 (0) | 2025.01.05 |
---|---|
[Python] pip를 사용한 외장 라이브러리 삭제 (1) | 2024.12.27 |
[Java] Double.MIN_VALUE는 음수가 아니다. (1) | 2024.11.20 |
[PowerShell] Windows에서 빈 폴더를 자동으로 삭제하는 PowerShell 스크립트 (1) | 2024.11.15 |
[Dev C++] Dev C++에서 for 내부 변수 선언 오류 해결 방법 (0) | 2024.11.09 |