👨🏿💻 정의 : 데이터를 효율적으로 저장, 관리, 조작하기 위한 표준화된 API 모음입니다.
✅ 핵심 개념
- Collection 인터페이스를 기반으로 다양한 자료구조(List, Set, Queue) 제공
- Map은 Collection의 하위 타입이 아니지만 함께 사용됨
- Generics(제네릭) 사용 가능 → 타입 안정성 제공
- 중복 허용 여부, 정렬 방식, 순서 유지 여부에 따라 다양한 구현체 제공
✅ Collection 계층 구조
Collection
- List
- ArrayList
- Vector
- Stack
- Vector
- LinkedList
- ArrayList
- Set
- HashSet
- LinkedHashSet
- TreeSet
- HashSet
Map
- HashMap
- LinkedHashMap
- TreeMap
- ConcurrentHashMap
✅ List (순서 보장, 중복허용)
구현체 | 특징 |
ArrayList | 배열기반, 조회 속도 빠름 (O(1)) , 삽입.삭제 느림(O(n)) |
LinkedList | 연결 리스트 기반, 삽입.삭제.빠름 (O(1)) , 조회 느림(O(n)) |
Vector | ArrayList 와 유사하지만 동기화(Synchronized) 지원 |
Stack | LIFO(Last In, Frist Out) 구조 |
✅ Set(중복 허용 x , 순서 보장 x)
구현체 | 특징 |
HashSet | 순서 없음, 중복 제거 , 빠른 조회(O(1)) |
LinkedHashSet | 입력 순서 유지 |
TreeSet | 자동 정렬(오름차순) , Comparable 또는 Comparator 필요 |
✅ Queue(FIFO x , 순서 유지)
구현체 | 특징 |
LinkedList | FIFO, 삽입.삭제 빠름 |
PriorityQueue | 우선순위 큐 (낮은 값부터 처리됨), 정렬된 방식으로 요소 관리 |
ArrayDeque | 양방향 큐(Deque) , Stack 대체 가능 |
✅ Map(키-값 저장, 키 중복 불가)
구현체 | 특징 |
HashMap | 순서 없음, 빠른 검색(O(1)), null 키 허용 |
LinkedHashMap | 입력 순서 유지 |
TreeMap | 자동 정렬(오름차순) |
ConcurrentHashMap | 멀티스레드 환경에서 동기화 지원 |
📌 컬렉션 변환
1. 배열 <-> List 변환
String [] array = {"a", "b" ,"c"};
List<String> list = Arrays.asList(array);
String[] newArrays = list.toArray(new String[0]);
- Arrays.asList() 는 고정길이의 list를 return 한다.
- 따라서 Arrays.asList()를 사용해서 배열을 List 로 변환 한 후 , List의 크기를 변경하는 작업은 불가능하다.
- .add() , .remove() 사용 불가
- .set() 으로 수정은 가능
- 크기 변경작업은 new ArrayList<>(Arrays.asList(array)); 로 ArrayList로 감싸서 사용 가능
2. List <-> Set 변환
List<String> list = new ArrayList<>(set);
Set<String> set = new HashSet<>(list);
3. Map <-> List 변환
Map<String, Integer> map = new HashMap<>();
map.put("A" ,1);
map.put("B" ,2);
List<String> keys = new ArraysList<>(map.keySet());
List<Integer> values = new ArrayList<>(map.values());
Map<String,Integer> map = new HashMap<>();
map.put("first" , 1);
map.put("second", 2);
List<Map.Entry<String,Integer> list = map.entrySet()
.stream()
.collect(Collectors.toList());
+) map.entrySet() 사용법 : 맵의 키-값을 Set 형태로 변환하여 맵의 모든 항복을 쉽게 반복하거나 수정할 수 있음
for(Map.Entry<String,Intger> entry : map.entrySet()){
if(entry.getKey().equals("first"){
entry.setValue(10);
}
}
'프로그래밍 > JAVA' 카테고리의 다른 글
String.valueOf(),toString() 차이점 (0) | 2025.01.31 |
---|---|
필드 선언 시 기본 데이터 타입,불변객체 / 참조 타입 차이점 (0) | 2025.01.24 |
Scanner , Buffer 차이점 (0) | 2025.01.15 |
서블릿(Servlet)이 뭘까? (1) | 2025.01.10 |
static은 왜 쓰는걸까? (정적 바인딩 vs 동적바인딩) (0) | 2024.12.22 |