[Java / 자바] Map, HashMap

sbj·2023년 12월 14일

Java

목록 보기
14/15
post-thumbnail

Map(맵) Interface

대응관계를 쉽게 표현할 수 있게 해주는 자료형이다.

맵은 다른 언어에도 있는 자료형으로, associative array 또는 hash 라고도 불린다.

맵은 사전과 비슷한데, 예를 들어 People 이란 단어에는 사람, baseball 이라는 단어에는 야구라는 뜻이 부합되듯이 맵은 키(key)와 값(value)를 한 쌍으로 갖는 자료형이다.

키(key)값(value)
people사람
baseball야구

즉, Key 값과 Value를 저장하는 데이터 구조를 표현하는 인터페이스이다.


그럼 Map을 언제, 왜 사용하는가?

맵은 key-value 연관 매핑에 사용하기에 적합하다. 키값으로 조회하거나, 검색하거나, 업데이트 할 때 유용하게 사용될 수 있다.

  1. 오류코드 및 설명 맵
  2. Zip, City 코드의 맵
  3. 매니저 ↔ 직원의 맵. 각 매니저(With Key) 매니저가 관리하는 직원의 리스트와 연관되어있다.
  4. 클래스와 학생의 맵. 각 클래스(With Key)는 학생의 리스트(value)와 연관되어 있다.

Example

public class Main {
	public static void main(String[] args) {
		Map<String, Integer> numbers = new HashMap<>();
		numbers.put("One", 1);
		numbers.put("Two", 2);
		numbers.put("Three", 3);

		System.out.println("Numbers:" + numbers.keySet());
		System.out.println("Values:" + numbers.values());
		System.out.println("Entries:" + numbers.entrySet());
		
		int value = numbers.remove("Two");
		System.out.println("Removed Value: " + value);

	}
}

Map 인터페이스에는 여러 구현체가 있다.

  • Map Interface
    • HashMap
    • TreeMap
    • LinkedHashMap

HashMap(해쉬맵)

해쉬맵은 Map 인터페이스를 *구현한 클래스로. 해시 테이블을 사용해서 키와 값을 저장하는 구조를 제공한다.*

  1. 중복키를 허용하지 않아 데이터의 유일성을 보장한다. 하지만 값의 중복은 허용한다.
  2. 데이터의 빠른 접근을 가능하게 한다. (중복키를 허용하지 않으므로)
  3. 해쉬맵은 null 키와, null 값을 허용하여 다양한 데이터 구조를 효과적으로 처리할 수 있다.
  4. 삽입 순서를 유지하지 않으며, 해시 함수에 의해 결정되는 순서대로 요소를 저장한다.

그래서 이게 어떻게 유용하다는 건가?

예를 들어 사물함을 사용하고 있다고 가정해보자.각 사물함에는 고유한 번호가 있고, 그 번호에 따라 소지품을 저장할 수 있다. 이 때, 사물함 번호는 key가 되고 소지품은 value가 되는 것이다.

그러면 해쉬맵에서 키가 고유 식별자로 작동한다는 것은 무엇을 의미하는가? 사물함은 중복된 번호를 가질 수 없다. 이 특성 덕에, 각 사물함을 더 빠르게 찾을 수 있는 것이다.


Examples

import java.util.HashMap;
import java.util.Map;

public class Main {

	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<>();

		map.put("Alice", 24);
		map.put("Mike", 26);
		map.put("David", 28);
		// 키를 이용해 값 얻기
		int aliceAge = map.get("Alice");
		System.out.println(aliceAge);
		// 맵 크기 확인
		System.out.println(map.size());
		// 맵 모든 요소 출력
		for (Map.Entry<String, Integer> entry : map.entrySet()) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
		// 요소 삭제
		map.remove("Mike");

		for (Map.Entry<String, Integer> entry2 : map.entrySet()) {
			System.out.println(entry2.getKey() + ":" + entry2.getValue());
		}
	}
}

Summary

  1. Map 인터페이스는 key, value 를 사용해서 데이터를 저장하는 자바의 데이터 구조이다.
  2. 반면, HashMap은 이를 구현한 클래스다.
    1. HaspMap은 중복 값은 허용하나, 중복 키를 허용하지 않아 데이터의 유일성을 보장한다.
    2. 삽입 순서를 유지하지 않으며, 해시 함수에 의해 결정되는 순서대로 요소를 저장한다.

그래서, 내가 Map 과 HaspMap을 공부한 이유
언제 사용하는가? Map과 HaspMap을 사용하기에 적절한 상황은 언제인가?

HashMapHashMap은 검색과 수정이 빈번하게 발생하고, 순서가 중요하지 않은 경우에 사용된다.

예를 들어, 사용자의 사용자ID와 사용자 정보를 매핑해야 하는 경우 ⇒

  • 사용자 ID : Key
  • 사용자 정보 : Value
  • 이러한 형태로 HashMap에 저장하면 효율적으로 데이터를 저장하고 처리할 수 있다.
profile
Strong men believe in cause and effect.

0개의 댓글