# Map 인터페이스
* 개념: Map 인터페이스는 자바 컬렉션 프레임워크의 일부분으로, 키와 값의 쌍으로 데이터를 저장하는 자료구조이다. 각 키는 유일하며, 하나의 키에 하나의 값만 매핑된다.
* 예제
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
// Map 인터페이스를 구현한 HashMap 인스턴스 생성
Map<String, Integer> map = new HashMap<>();
// 키-값 쌍 추가
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
// 값 가져오기
System.out.println(map.get("one")); // 출력: 1
// 키-값 쌍 출력
for (String key : map.keySet()) {
System.out.println("Key: " + key + ", Value: " + map.get(key));
}
}
}
# Map.Entry<K, V> 인터페이스 (정적 중첩 인터페이스)
Map 인터페이스 내에는 Entry라는 정적 중첩 인터페이스가 정의되어 있다. 이 인터페이스는 Map의 각 키-값 쌍을 나타낸다.
# 정적 중첩 인터페이스
* 개념: 정적 중첩 인터페이스는 외부 인터페이스나 클래스에 정의된 내부 인터페이스로, 외부의 인스턴스와 독립적으로
존재할 수 있다. 이를 통해 관련된 인터페이스나 클래스를 논리적으로 그룹화하여 코드를 더 조직화할 수 있다.
* 예제.
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class EntryExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
}
# Map의 메모리 구조
* Heap 영역: Map 인터페이스를 구현한 객체(예: HashMap)는 힙 메모리 영역에 저장된다.
힙 영역은 자바 객체가 동적으로 할당되는 메모리 공간이다.
* Entry 객체: Map은 내부적으로 여러 개의 Entry 객체를 관리한다. Entry 객체는 키와 값의 쌍을 나타낸다. 이들 역시 힙 메모리에 저장된다.
# Map 인터페이스의 구현
Map 인터페이스를 구현하는 대표적인 클래스는 HashMap과 TreeMap 이다. 이들 클래스는 Map.Entry 인터페이스를 구현하여 내부적으로 엔트리 객체를 관리한다.
# 예제 시나리오
1. new HashMap<>() 를 호출하면 힙 영ㅇ역에 hashMap 객체가 생성된다.
2. map.put("one", 1) 을 호출하면 HashMap 객체 내부에 Entry 객체가 생성되고, 키 "one"과 값 1이 Entry 객체에 저장된다.
3. entrySet() 메서드를 호출하면 HashMap의 모든 Entry 객체를 포함하는 집합(Set) 뷰를 반환한다. 이 뷰 역시 힙 메모리 영역에 저장된다.
# 요약
* Map 인터페이스: 키-값 쌍으로 데이터를 저장하는 구조
* 정적 중첩 인터페이스:외부 인터페이스나 클래스와 논리적으로 관련된 인터페이스를 그룹화하여 정의한다. 외부의 인스턴스와 독립적으로 존재할 수 있다.
* 메모리 구조: Map 객체와 Entry 객체는 힙 메모리 영역에 저장되며, Entry 객체는 Map 객체 내부에서 관리된다.
'Programming > Java' 카테고리의 다른 글
java.util.Map retainAll() : Map에서 특정 키만 유지 (0) | 2024.07.31 |
---|---|
[java] String과 getBytes 메소드 (0) | 2019.07.01 |
[Java] 이클립스 UTF-8 BOM 제거하기 (0) | 2019.06.27 |
리눅스 정규식 (0) | 2016.12.27 |
JAVA File 삭제 (폴더 안의 파일 모두 삭제) (0) | 2016.12.20 |