728x90
컬렉션 프레임워크는 모든 자바 교재를 보면 뒷부분에 나오는 것이지만 생각보다 자주 까먹게 되는 부분인 것 같다. 따라서 정리가 필요할 것 같다는 생각이 들었다. 자주 사용하려고 노력도 필요하지만 언제, 어떤 식으로 사용되는지 등을 다시 알아보는 시간을 가져고 보자 한다.
Map 정의 및 특징
- 컬렉션 프레임워크에서 키(Key)와 값(Value) 쌍으로 데이터를 저장하고 관리하는 자료 구조.
- 데이터를 빠르게 검색, 수정, 삭제할 수 있는 기능을 제공
- 키는 유일해야 함. 동일한 키에 대해 여러 값을 저장할 수 없음
- 값은 중복이 가능함. 같은 값은 여러 키에 중복될 수 있음
- null의 키와 값 Map의 일부에서는 허용됨
정의는 쉽게 키-값 쌍으로 저장된 구조로 간단히 정리가 되는데 map은 언제 사용할까? 라는 의문이 들었다.
Map을 사용해야 하는 상황
- 키와 값의 관계가 필요할 때
키-값 쌍으로 데이터를 저장하므로, 각 키에 대한 고유한 값을 매핑해야 할 때 유용 - 빠른 데이터 조회가 필요할 때
내부적으로 해시 테이블을 사용하거나 이진 트리 구조를 사용하여 데이터를 저장. 이로 인해 키를 기반으로 한 빠른 조회가 가능 - 키의 유일성이 필요한 경우
Map을 가장 잘 나타낸 것이 아이디-비밀번호라고 생각함. 아이디는 중복을 허용하지 않지만, 비밀번호는 중복이 가능하기 때문. 즉 아이디가 키, 비밀번호가 값
단, Map의 경우 동일 키에 대한 값을 덮어쓰게 됨.
중복된 키를 저장할 수 없기 때문에 데이터의 무결성을 보장 - HashMap과 TreeMap
HashMap 키의 순서가 중요하지 않은 경우
TreeMap 키의 순서가 중요하고, 자동으로 정렬된 순서 - null
키-값 모두 null을 허용할 수 있음
Map 인터페이스의 주요 메소드
- put(K key, V value)
지정한 키와 값을 Map에 추가함. 단, 동일한 키가 이미 존재하면 기존 값을 덮어씀 - get(Object key)
지정된 키에 해당하는 값을 반환. 키가 없으면 null을 반환 - remove(Object key)
지정된 키에 해당하는 항목을 제거 - containsKey(Object key)
지정한 키가 Map에 존재하는지 여부를 확인 - size()
Map에 저장된 키-값 쌍의 수를 반환 - isEmpty()
Map이 비어있는지 확인 - clear()
Map에 저장된 모든 항목을 제거
Map은 인터페이스이다. 그렇다면 이를 구현해서 사용해야 하는데 구현한 것들은 뭐가 있을까?
Map을 구현한 클래스
- HashMap
가장 널리 사용되는 Map 구현체
해시 테이블을 기반으로 빠른 조회 성능일 제공
순서를 보장하지 않음. 데이터는 삽입 순서와 관계없이 저장
null 키와 null 값 허용
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
===============================================
import java.util.HashMap;
import java.util.Map;
public class 맵 {
public static void main(String[] args) {
// HashMap을 생성 (학생 ID를 키로, 성적을 값으로 저장)
Map<Integer, String> studentGrades = new HashMap<>();
// 데이터를 삽입 (학생 ID, 성적)
studentGrades.put(101, "A");
studentGrades.put(102, "B");
studentGrades.put(103, "A+");
// 성적 조회
System.out.println("학생 101의 성적: " + studentGrades.get(101)); // A
// 특정 학생 ID가 존재하는지 확인
System.out.println("학생 102의 성적이 있는지 확인: " + studentGrades.containsKey(102)); // true
// 학생 삭제
studentGrades.remove(103);
System.out.println("학생 103 삭제 후: " + studentGrades);
// Map의 크기 확인
System.out.println("학생 수: " + studentGrades.size());
// 모든 항목 순회
for (Map.Entry<Integer, String> entry : studentGrades.entrySet()) {
System.out.println("학생 ID: " + entry.getKey() + ", 성적: " + entry.getValue());
}
}
}
- TreeMap
키를 자동으로 정렬(기본적으로 오름차순)
null키 허용하지 않음
Map<String, Integer> map = new TreeMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
- LinkedHashMap
HashMap처럼 데이터를 해시 테이블에 저장하지만, 삽입 순서를 유지
HashMap처럼 빠른 조회 성능을 제공
삽입 순서대로 데이터를 순회할 수 있음
null키와 null 값 허용
Map<String, Integer> map = new LinkedHashMap<>();
map.put("apple", 1);
map.put("banana", 2);
이 외에 ~~HashMap으로 된 클래스가 있지만 프로그래밍을 할 때는 HashMap을 코딩 테스트할 때 LinkedHashMap을 사용하는 경우를 보았다.
정리
데이터의 키와 쌍을 이루는 경우에 사용하며 Map을 사용하면 효율적으로 데이터 처리와 관리가 가능
728x90
'organize > 프로젝트' 카테고리의 다른 글
1차 프로젝트 추가 - 암호화2 (0) | 2024.12.23 |
---|---|
1차 프로젝트 추가 - 암호화1 (0) | 2024.12.22 |
justBoard15 댓글 구현(6) 完 (0) | 2024.11.11 |
justBoard15 댓글 구현(5) 댓글 페이지 처리 (0) | 2024.10.20 |
justBoard14 댓글 구현(4) (0) | 2024.10.15 |