Development

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

Languages/JAVA

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

yo~og 2021. 11. 8. 23:09
반응형

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로 만들어 주는 것입니다.

반응형
Comments