Study/java

[Java] HashMap 사용법 및 예제

 

HashMap이란?

자바의 HashMap은 많이 사용되는 자료구조 중의 하나입니다.

Map은 키와 값을 한 쌍으로 하여 데이터를 저장하는 자료구조입니다.

Map에서 데이터를 찾을 때는 키를 사용해서 데이터의 위치를 계산하기 때문에 조회속도가 빠릅니다.

HashMap은 내부에서 해시 테이블을 데이터를 저장하는 특징을 가집니다.

Java HashMap 공식 문서 바로가기

 

HashMap (Java Platform SE 8 )

If the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null. If the function returns null no mapping is recorded. If the function

docs.oracle.com

 

 

 

HashMap의 선언 및 초기화 방법과 값을 넣는 방법에 대해 설명드리겠습니다.

 

선언 및 초기화

HashMap 생성자를 사용해서 선언하는 방법은 다음과 같습니다.

// 기본 선언법
Map<String, Integer> map = new HashMap<>();

// 초기 용량, 로드 팩터 지정
Map<String, Integer> limitMap = new HashMap<>(2, 1);

// 다른 맵의 값으로 초기화
Map<String, Integer> otherMap = new HashMap<>(map);

 

첫번째는 아무런 옵션 없이 그대로 생성하는 방법입니다.

두번째는 초기 용량(initalCapacity)과 로드 팩터(loadFactor)를 지정해서 생성하는 방법입니다.

세번째는 다른 맵의 값으로 새로운 맵을 생성하는 방법입니다.

 

초기 용량 값은 HashMap이 생성될 때 내부적으로 할당하는 배열의 크기입니다.

기본값은 16입니다.

너무 낮게 설정하면 내부에서 리사이징 과정을 거치는 빈도가 늘어나고, 너무 높게 설정하면 불필요하게 메모리를 많이 사용할 수 있기때문에 적절한 값을 설정하는 것이 좋습니다.

 

로드 팩터 값은 HashMap의 확장 임계값입니다.

기본 값은 0.75인데, 이는 HashMap의 용량이 75%가 채워지면 크기를 확장한다는 의미입니다.

 

 

 

 

값 넣기

HashMap에 값을 넣을 때는 put 메소드를 사용하면 됩니다.

Map<String, Integer> map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
map.putIfAbsent("key4", 4);

putIfAbsent는 key에 해당하는 값이 없을 때(key 자체가 없거나 key는 있지만 값이 null인 경우) 지정된 값을 넣는 메소드입니다.

 

key, value란?

Map에서 key는 맵 내부의 각 항목들을 고유하게 식별하는 역할을 합니다.

value는 키에 매핑된 데이터를 의미합니다.

 

key는 고유하고, 변하지 않아야 한다는 특징이 있습니다.

Map에서는 key로 값을 찾기때문에 중복값이 있으면 안됩니다.

만약에 사용자 정의 클래스를 키로 사용하고자 한다면, hashcode 메소드와 equals 메소드를 적절하게 오버라이드해서 중복되지 않게 사용해야 합니다.

value는 중복과 변경이 허용됩니다.

 

 

읽으면 좋은 글

[Java] HashMap get - key로 특정 값(value) 가져오기

 

[Java] HashMap get - key로 특정 값(value) 가져오기

HashMap에서 key를 이용해서 값을 가져오는 방법에 대해 설명드리겠습니다. get 메소드 사용법 우선, 값을 가져올 Map을 생성합니다. Map birthByName = new HashMap(); birthByName.put("Kim", 1980); birthByName.put("Lee",

priming.tistory.com