본문 바로가기
코딩일기/Java

[Collection : 컬렉션] HashMap 설명과 사용법

by 욱파이어니어 2021. 5. 19.
728x90
반응형

우리가 Map이라는 것은 key값과 value 값으로 값을 저장해서 key값 혹은 value 값으로 안에 저장된 내용을

가져올수가 있다.

 

내가 이번에 배운 HashMap도 Map의 한 종류로써 같이 Key값과 value값을 사용해서 값을 저장하고 찾는다.

 

HashMap을 사용할때는 주로 다량의 문자열의 비교가 필요할때 사용한다.

 

그럼 이제 HashMap 사용법부터 알아보자.

 

일단 제일 중요한건 import를 해야한다.

 

import java.util.HashMap;

위처럼 import 해와도 되지만 귀찮으니 아래와 같이 해도 된다.

import java.util.*

(java.util 안에 있는것은 모두 import 해온다는것이다.)

 

그럼 이제 HashMap 변수를 만들어야 한다.

 

HashMap< key , value > hm = new HashMap<>();

위처럼 만들면 되는데 주의할점은 key에다가는 키값에 사용할 데이터 타입을 적으면 되고 value 에다가는 value값에

사용할 데이터 타입을 적어주면 된다.

 

HashMap에 값을 넣을떄는 put 을 이용해서 값을 집어 넣는데 방법은 아래와 같다.

 

hm.put(key , value);

put은 매개변수 인자로 두개를 받는데 앞에건 key값을 받고 뒤에건 value값을 받는다.

 

그리고 hashmap에 저장된 값을 가져올때는 키 값을 가지고 받아올수가 있다.

방법은 .get() 함수를 사용하는것이다.

hm.get(key)

이렇게 HashMap에 저장된 값을 가져올수가 있다.

 

그리고 containKey(), remove(), size(), clear(), isEmpty() 등이 있는데 아래는 지금 여기서는 설명하지는 않겠다.

(구글에 검색 요망)

 

 

자 그럼 이제 Map에 값을 집어 넣고 이러는건 완료 했다 그럼 이제 Map에 저장된 각각의 element에 접근을 해야 

한다. 

 

각각의 element에 접근 하는 방법에는 크게 3가지가 있다.

 

1. values()

HashMap 안에 있는 모든 값들은 반환하는것

 

2.  keySet()

HashMap안에 있는 모든 key를 Set에 담에  반환

 

3. entrySet()

HashMap에 있는 모든 값을 (key+ value)해서 Set 에다 반환

 

각각의 방법을 어떻게 사용하는지 소스를 통해서 보자.

 

1. values()

hm.values()

 

2.  keySet()

keySet은 사용하는 방법이 2가지이다.

 

1. KeySet() + Iterator를 사용해서 값을 출력

2. for each문 사용해서 출력

 

KeySet() + Iterator 방법부터 살펴보자.

 

2-1. KeySet() + Iterator

		Set<String> keySet = hm.keySet();//키 값을 Set으로 만듬
		Iterator<String> it = keySet.iterator();//Iterator 에다가 위에서 만든 set을 넣음
		while(it.hasNext()) {
			String key = it.next();//뽑아서 따로 넣고 그부분을 get한다.
			System.out.printf("키 : %s, 값 : %s\n",key , hm.get(key));
		}

 

이렇게 해서 사용하는것이다.

 

아마 Iterator가 뭐야? 하는 의문이 들수 있다.

Iterator는 Set에 순서 없이 정렬되어 있는것들을 한줄로 세워서 쫙 뽑는것이다.

마치 엉켜있는 실뭉치에서 실하나를 뽑는것과 같은 느낌이다.

 

위 소스를 설명하자면 

hashMap인 hm에서 hm,keySet()을 해서 해당 HashMap에 있는 모든 키값을 Set 형식으로 반환하는것이다.

그래서 Set<String> 값인 keySet에다가 값을 받고

Iterator<String> 형태인 it에다가 keySet.iterator(); 해서 iterator 형식으로만든것이다

(순서없이 된애들을 한줄로 세운것)

그럼 it에는 set 형태인 애들이 들어가 있는데

 while 문으로 안에 들어 있는게 있을때까지 진입해서 실행문을 실행하는것이다.

 

2-2. for each문 사용해서 출력

		for(String key : hm.keySet()) { //여기 안에 있는 set은 String 타입의 key 밖에 없어서
			System.out.printf("키 : %s, 값 : %s\n",key , hm.get(key));
		}

 

 

3. entrySet()

 

이것도 마찬가지로

 

1. entrySet() + Iterator를 사용해서 값을 출력

2. for each문 사용해서 출력

 

이렇게 두가지로 나뉜다.

방법은 유사하니 설명은 생략하고 소스만 보여주겠다.

 

 

 

1. entrySet() + Iterator를 사용해서 값을 출력

	Set<Entry<String,Integer>> entrySet = hm.entrySet(); //key값과 value값을 모두 받을수 있는 Entry를 만들고
		//여기서 Entry가 어떤 덩어리를 받는지 제네릭을 해주어야 한다.
		Iterator<Entry<String, Integer>> it2 = entrySet.iterator();//위의 Entry를 iterator를 하는것을 만든다.
		while(it2.hasNext()) {
			Entry<String,Integer>entry = it2.next();
            //it2.next()로 entry 덩어리를 받는다 여기서 이렇게 값을 따로 받는 이유는
			//next를 두번 호출하게 되면 커서가 두번 이동하게 되니까 값을 따로 받고 하는게 맞다.
			System.out.printf("키 : %s, 값 : %s\n", entry.getKey(),entry.getValue());
		}

 

 

2. for each문 사용해서 출력

	Set<Entry<String,Integer>> entrySet2 = hm.entrySet(); //entry만들어서 넣고
		for(Entry<String, Integer> entry : entrySet2) {//위의 entry를 뽑는 for-each문을 만들어서
			//해당 Entry를 출력한다. 근데 여기서 뽑는 entry도 제네릭해주어야 한다.
			System.out.printf("키 : %s, 값 : %s\n", entry.getKey(),entry.getValue());
		}
반응형