본문 바로가기
Java

[Java] HashMap

by byeongoo 2020. 3. 26.

자바를 사용하면서 HashMap이란 용어를 들어보셨을겁니다. 오늘은 HaspMap에 대해서 정리를 한번 해보겠습니다. HashMap은 Map 인터페이스의 한 종류로서 Key와 Value값으로 데이터를 저장하는 형태를 가지고 있습니다.

 

Map은 키(Key)와 값(Value)을 하나로 묶어서 저장하는 컬렉션 클래스들을 구현하는데 사용됩니다. Map에 종류에는 HashTable, HashMap, LinkedHashMap, SortedMap, TreeMap 등이 있는데 이들 객체 또한 Key, Value로 데이터를 저장합니다. 이중에서 오늘은 HashMap에 대해서 다뤄 보겠습니다. HashMap 또한 Map 인터페이스를 구현했기 때문에 Map의 속성을 모두 가지고 있고, 저장 방식 또한 동일합니다. 또한 해싱(hashing)이란 검색 방법을 사용하기 때문에 많은 양의 데이터를 검색하는데 뛰어난 성능을 보여줍니다.

 

HashMap에서 주의해야할 사항은 HashMap 객체에 데이터를 저장할 때, key 값은 중복되지 않고, value 값은 중복이 허용된다는점입니다.

map.put("길동", "20살");
map.put("철수:, "27살");
map.put("길동", "27살");

이렇게 같은 key값으로 데이터를 넣었을 때, "길동"에는 가장 나중에 넣은 "27살"이 저장됩니다. 이런형태로 key값은 유일하고, key가 다르다면 value는 여러개가 중복될 수 있습니다.

 

다음은 HahMap의 생성자와 메소드를 정리한 표입니다.

 

생성자 / 메서드 설 명
HashMap() HashMap 객체를 생성한다.
HashMap(int initialCapacity) 지정된 값을 초기용량으로 하는 HashMap 객체 생성한다.
HashMap(int initialCapacity , float loadFactor) 지정된 값을 초기용량과 load factor의 HashMap 객체 생성한다.
HashMap(Map m) 주어진 Map에 저장된 모든 요소를 포함하는 MashMap 을 생성한다.
void clear() HashMap에 저장된 모든 객체를 제거한다.
Object clone() 현재 HashMap을 복제하여 반환한다.
boolean containsKey(Object key) HashMap에 지정된 키(key)가 포함되어 있는지 알려준다. (포함되어 있으면 true)
boolean containsValue(Object key) HashMap에 지정된 값(value)가 포함되어 있는지 확인한다. (포함되어 있으면 true)
Set entrySet() HashMap에 저장된 키와 값을 엔트리(키와 값의 결합)의 형태로 Set에 저장하여 반환한다.
Object get(Object key) 지정된 키(Key)의 값(객체)을 반환한다.
boolean isEmpty() HashMap이 비어 있는지 확인한다.
Set keySet() HashMap에 저장된 모든 키가 저장된 Set을 반환 한다.
Object put(Object key, Object value) HashMap에 키와 값을 저장 한다.
void putAll(Map m) Map에 해당하는 모든 요소를 HashMap에 저장 한다.
Object remove(Object key) HashMap에서 지정된 키로 저장된 값(객체)를 제거한다.
int size() HashMap에 저장된 요소의 개수를 반환한다.
Collection values() HashMap에 저장된 모든 값을 컬렉션 형태로 반환한다.
Object getOrDefault() 찾는키가 존재하면 찾는키의 값을 반환하고 없으면 기본값 반환

 

이제 HashMap의 기본 사용방법을 알아 보겠습니다.

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

public class MainClass {

	public static void main(String[] args) {
		
		/*
		 ** 1.HashMap에 Data 넣기 (Key , Value) 형태  
		 */
		HashMap<String , Integer> map = new HashMap<String , Integer>();
		map.put("철수", new Integer(20));
		map.put("길동", new Integer(27));
		
		//key값에 따른 value 조회
		System.out.println(map.get("길동"));
		
		/*
		 ** 2.HashMap key가 있는지 조회하기
		 */
		if(map.containsKey("철수")){
			System.out.println("map이 철수를 포함하고 있습니다.");
		}

		/*
		 ** 3.HashMap 순회하기  
		 */
		
		//HashMap의 모든 key, value를 가져와 순회합니다.
		for(Map.Entry<String, Integer> entry : map.entrySet()) {
			String  name = entry.getKey();
			Integer age  = entry.getValue();
			
			System.out.println("이름 : " + name + ", 나이  : " + age);
		}
		
		//HashMap의 모든 key를 가지고옵니다.
		for(Object key : map.keySet()) {
			System.out.println("이름 : " + key);
		}
		
		//HashMap의 모든 value를 가지고옵니다.
		for(Object value : map.values()) {
			System.out.println("나이 : " + value);
		}
		
		/*
		 ** 4. 데이터제거 후 HashMap 순회하기  
		 */
		map.remove("길동");
		for(Map.Entry<String, Integer> entry : map.entrySet()) {
			String  name = entry.getKey();
			Integer age  = entry.getValue();
			
			System.out.println("이름 : " + name + ", 나이  : " + age);
		}
		
		/*
		 ** 5.찾는키가 존재하면 찾는키의 값을 반환하고, 없으면 기본값 반환  -> getOrDefault()  
		 */
		map.put("영희", map.getOrDefault("영희", 16));
		System.out.println("영희나이 : " + map.get("영희"));
		
		map.put("영희", map.getOrDefault("영희", 20));
		System.out.println("영희나이 : " + map.get("영희"));

	}
	
}

[결과 화면]

27
map이 철수를 포함하고 있습니다.
이름 : 철수, 나이  : 20
이름 : 길동, 나이  : 27
이름 : 철수
이름 : 길동
나이 : 20
나이 : 27
이름 : 철수, 나이  : 20
영희나이 : 16
영희나이 : 16

기본적으로 사용 방법은 위와 같습니다. 원하는 Set을 가지고 온 후 iterator를 사용해서 List를 출력하는 방식 입니다. iterator는 Collection에 포함된 객체들에 접근할 수 있는 인터페이스로 생각 하시면 됩니다.

 

또한 map에서 사용하는 entrySet()이나 KeySet()메소드는 반환타입이 Set인 데이터들을 반환해 줍니다. Set이라는 인터페이스는 Collection 인터페이스를 구현한 클래스이기 때문에, iterator를 사용해서 접근할 수 있습니다.

 

REFERENCE 

https://arabiannight.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%EC%9E%90%EB%B0%94-HashMap-%EC%9D%B4%EB%9E%80

'Java' 카테고리의 다른 글

[Java] JAVA API 도큐먼트  (0) 2020.04.03
[Java] 제네릭(Generic)  (0) 2020.03.31
[Java] public static void main(String args[]) 분석  (0) 2020.03.24
WAR, JAR , EAR 파일 이란  (2) 2020.01.04
[Java] 문자열 split 후 List에 넣기  (0) 2019.11.08