[Java] Map

이도원·2022년 11월 23일
0

Java 문법

목록 보기
6/8

기본적으로 Map은 key-value 구조
Map은 인터페이스로 선언되어 있고, 구현체로는 HashMap, TreeMap, LinkedHashMap이 존재

HashMap<Key, Value>

특징

  • bucket은 배열 기반 구조이다.
  • 충분히 큰 데이터를 가지고 있을 경우 충돌시 저장방식을 LinkedList -> TreeNode로 변경

장점

  • key가 index로 저장되기 때문에 값 검색시 선형적 접근의ArrayList,LinkedList보다 빠름.
  • key를 null 값으로 할 일은 빈번하지 않지만 null key가 가능.

단점

  • 크기가 가득 차서 조정이 필요할 경우 더 큰 해시맵으로 변경. 지연시간 있음.
  • 데이터를 저장하는데 필요한 메모리보다 훨씬 더 많은 메모리를 필요로 함.
  • HashMap에 저장된 key를 추출했을 때, 정렬 X

사용용도

  • index가 아닌 key를 이용하여 데이터 저장과 접근이 필요할 경우 사용.
  • 데이터의 크기가 어느 정도 예상되는 경우 사용.
  • 삽입 삭제가 빈번할 경우 사용.

주의할점

  • 동일한 key로 저장할 경우 기존에 저장된 값이 소멸.
  • key는 대소문자를 구분.
  • 다양한 참조 자료형을 key로 사용할 수 있으나 index 생성 시 논리적으로 동일한 객체라고 하더라도 물리적으로 인스턴스가 다를 경우 Object를 key로 사용하면 원치 않는 결과가 발생할 수 있음.
import java.util.HashMap;
//HashMap의 생성
HashMap<String, String> map = new HashMap<>();

//데이터 삽입
map.put("codelatte", "코드라떼");	// put(key, value) 

//데이터 접근
map.get("codelatte");	//key통해 접근
map.getOrDefault("coffee", "커피");	//key가 없는 경우 defaultvalue 반환

//데이터 삭제
map.remove(“kantata”);	//key통해 삭제

//key출력
for (String key : map.keySet()) {	//정렬 X
    System.out.println(key);
}

//value출력
for (String value : map.values()) {	//정렬 X
    System.out.println(value);
}

TreeMap<Key, Value>

특징

  • Tree구조 기반.
    장점
  • key가 Red-Black Tree로 재배치 저장.값검색시 선형적접근ArrayList,LinkedList보다 빠름.
  • key 값을 기준으로 오름차순으로 정렬된 key를 반환.
  • HashMap 대비 필요한 메모리 양만 사용하므로 상대적으로 메모리를 절약.
    단점
  • 삽입,삭제 시 Node를 재배치하는 연산이 발생.(삽입 삭제가 빈번할 경우 HashMap보단 느림)
  • HashMap보다 검색 속도가 상대적으로 느림.
  • null key가 불가능.
    사용용도
  • 저장되는 데이터의 개수가 몇 개인지 예상되지 않는 경우 사용.
  • 삽입과 삭제가 빈번하지 않을 때 사용한다.
  • 정렬된 key가 필요할 때 사용.
    주의할점 (HashMap과 동일)
import java.util.TreeMap;
//TreeMap의 생성
TreeMap<String, String> map = new TreeMap<>();

//데이터 삽입
map.put("codelatte", "코드라떼");	//put(key, value)

//데이터 접근
map.get("codelatte");
map.getOrDefault("coffee", "커피"); //해당 key 존재하지 않을 시 반환 값 설정

//데이터 삭제
map.remove(“kantata”);	//key이용

//데이터출력
for (String key : map.keySet()) {	//key 오름차 정렬 상태
    System.out.println(key);
}

LinkedHashMap<Key, Value>

특징
HashMap을 상속받고 원리는 같음.
장점

  • HashMap의 장점을 그대로 계승.
  • LinkedHashMap은 key의 저장된 순서를 보존.
    단점
  • HashMap의 단점을 그대로 계승.
    사용용도
  • key또는 값의 저장된 순서가 중요할 때 사용.
import java.util.LinkedHashMap;
//LinkedHashMap 생성
LinkedHashMap<String, String> map = new LinkedHashMap<>();

//데이터 삽입,접근,삭제,출력 방식은 HashMap과 같음.
for (String key : map.keySet()) {
    System.out.println(key);
}	//LinkedHashMap은 HashMap과 다르게 key를 저장한 순서로 출력
profile
studying

0개의 댓글