본문 바로가기

Languages/JAVA

[JAVA] HashMap의 개념, 사용법, 예제

HashMap를 알아봅시다! 😉


오늘은 HashMap에 대해서 알아봅시다.

 


개념

 

자바에서 HashMap은 Map의 일종이며, key : value 형태로 데이터를 저장하기위해 사용됩니다.

key 값은 중복이 불가능하지만 value 값은 중복 가능합니다.

 


사용법

 

import java.util.HashMap;

HashMap을 사용하기위해서는 이 문장을 import 해주어야 합니다.


선언하기

Map<String,Object> map1 = new HashMap<>();

HashMap의 key의 type은 String으로 가장 많이 사용합니다.

value의 type은 여러 type을 섞어 사용할거면 Object를 사용하면 됩니다.

Map<String,String> map2 = new HashMap<>();
Map<String,Integer> map3 = new HashMap<>();

만약 value값을 여러 타입으로 지정하지 않고 한 타입으로 사용하면 이렇게 지정해도됩니다.


데이터 삽입 - put(key,value)

Map<String,Object> map1 = new HashMap<>();
map1.put("num", 1);
map1.put("name", "이00");
map1.put("addr", "서울특별시");

HashMap에서 데이터를 삽입할때는 put을 사용합니다. Value type을 Object로 지정해주었기 때문에 숫자, 문자 등 여러 타입을 넣을 수 있습니다.


데이터 얻기 - get(key)

int num1 = (int)map1.get("num");
String name1 = (String) map1.get("name");
String addr1 = (String) map1.get("addr");

value 의 Generic type을 Object로 했기 때문에 .get(키값) 메소드는 Object type을 리턴합니다. 

따라서 제대로 사용하기 위해서는 원래 type으로 casting 해 주어야합니다.

 

만약 Map<String,String>으로 선언했으면 casting을 하지 않으셔도 됩니다.


특정 key로 저장된 값 삭제하기 - remove(key)

//특정 key로 저장된 값 삭제하기
map1.remove("addr");

addr이라는 key를 가진 값을 삭제합니다.


비어있는지 여부확인 - isEmpty()

boolean isEmpty = map1.isEmpty();

map1이 비어있으면 true, 비어있지 않으면 false를 반환합니다.


모두 삭제 - clear()

map1.clear();

map1의 값을 모두 삭제합니다.


예제

 

예제 1 - key 값을 사용하여 value 값 찾기

Scanner 객체를 이용해서 영어단어를 입력 받아서 거기에 해당되는 뜻을 dic에서 찾아서 입력한 단어에 대한 뜻을 출력하는 프로그래밍 해 보세요. 

단, 없는 단어이면 존재하지 않는 단어입니다 라고 출력하면됩니다.

package test.main;

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

public class MainClass06 {
	public static void main(String[] args) {
		//key's Generic => String, value's Generic => String
		Map<String,String> dic = new HashMap<>();
		dic.put("cat","고양이");
		dic.put("dog","강아지");
		dic.put("house","집");
		dic.put("run","달리다");
		dic.put("phone","전화기");
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("찾을 단어를 입력하세요 : ");
		String str = scanner.nextLine();
		if(dic.containsKey(str)) {
			System.out.println("뜻 : "+ dic.get(str));
		}else {
			System.out.println("존재하지 않는 단어입니다.");
		}
	}
}

 

예제 2 - value 값을 사용하여 key 값 찾기

package test.main;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class MainClass08 {
	public static void main(String[] args) {
		//key's Generic => String, value's Generic => String
		Map<String,String> dic = new HashMap<>();
		dic.put("cat","고양이");
		dic.put("dog","강아지");
		dic.put("house","집");
		dic.put("run","달리다");
		dic.put("phone","전화기");
		
		//key 값의 집합을 Set로 얻어내기
		Set<String> keys = dic.keySet();
		//Set 안에 저장된 아이템을 일렬로 세운 반복자 객체 얻어내기
		Iterator<String> it = keys.iterator();
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("찾을 value 값을 입력하세요 : ");
		String line = scanner.nextLine();
		
		//결과 key 값을 담을 변수
		String resultKey = null;
		
		//저장된 아이템이 있는 동안에 반복문 돌면서 아이템을 빼낸다.
		while(it.hasNext()) {
			String key = it.next();
			//키값을 이용해서 value 값을 읽어온다.
			String value = dic.get(key);
			//만약 value가 입력한 문자열과 같으면
			if(value.equals(line)) {
				resultKey = key;
			}
			
		}
		if(resultKey!=null) {
			System.out.println("key 값 : " + resultKey);
		}else {
			System.out.println("해당 value는 저장되지 않았습니다.");
		}
	}
}

 

먼저 key 값의 집합을 set으로 만듭니다. 그 다음 set안에 저장된 아이템을 일렬로 세운 반복자 객체를 얻어냅니다.

찾을 value값을 입력받고 반복문을 돌면서 입력받은 값과 같은 value값이 있을때까지 찾습니다.

set은 순서가 없기 때문에 순서대로 정렬하기 위해서 Iterator로 만들어 주는 것입니다.