Map은 Key(키)와 Value(값)을 쌍으로 묶어 하나의 데이터로 저장을 합니다.

Key(키)는 중복되지 않지만 Value(값)는 중복을 허용합니다.

Key가 ID이고, Value가 123이라고 했을때

같은 Key의 값으로 ID가 저장 되지 않는 다는 겁니다. 

HashMap을 이용해서 어떻게 사용되는지 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
import java.util.HashMap;
 
public class MapDemo {
    public static void main(String[] args){
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        
        hm.put("dream"1234);
        hm.put("tree"1234);
        hm.put("happy"4568);
    }
}
cs

Map에 저장될때는 Object형식으로 저장이 됩니다.

그래서 저는 제네릭을 이용해서 Key는 String, Value는 Integer라고 했습니다.

그리고 List나 Set과는 다르게 put()을 이용해 데이터를 저장합니다.

매개변수로 Key와 Value를 받습니다.

7~9번라인처럼 저장을 하면 HashMap은 아래 그림과 같은 형태로 저장이 됩니다.



여기서 추가로  key가 dream 이고 Value를 9876 이라고 해서 저장을 해보겠습니다.

그리고 get()을 이용해 불러와 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.HashMap;
 
public class MapDemo {
    public static void main(String[] args){
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        
        hm.put("dream"1234);
        hm.put("tree"1234);
        hm.put("happy"4568);
        hm.put("dream"9876);
        
        System.out.println(hm.get("dream"));
    }
}




cs

get()을 사용할 때에는 매개변수로 key를 넣어주면 해당하는 Value가 출력이 됩니다.

위의 소스코드를 실행하면 9876이 출력됩니다.

그 이유는 이미 dream 이라는 Key가 있기때문에 마지막에 추가된 dream은 기존에 있던 dream으로 대체되고

Value값은 9876으로 바뀌기 때문입니다.

이러한 이유로 Key는 중복이 허용되지 않습니다.


Map인터페이스에 entrySet()이라는 메소드가 있는데 이 메소드를 이용하면 Key와 Value를 Set형식으로 저장을 할 수 있습니다. 이 때 Set의 데이터타입은 Map.Entry입니다. 이는 Map 인터페이스에 존재하는 내부인터페이스인 Entry입니다.

(상단의 이미지를 참조)

Entry인터페이스에는 getKey()getValue()가 존재합니다. 

이것을 이용하면 Key따로, Value따로 읽어 올 수가 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
 
public class MapDemo {
    public static void main(String[] args){
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        
        hm.put("dream"1234);
        hm.put("tree"1234);
        hm.put("happy"4568);
        hm.put("dream"9876);
        
        Set<Map.Entry<String, Integer>> entryset = hm.entrySet();
        
        Iterator<Map.Entry<String, Integer>> hm_i = entryset.iterator();
        
        // 키와 값 출력
        while(hm_i.hasNext()){
            Map.Entry<String, Integer> e = hm_i.next();
            System.out.println("아이디 : " + e.getKey() + " 비밀번호 : " + e.getValue());
        }
    }
}
 
cs


* Set타입으로 받아와서 Iterator를 사용해 출력하는 모습입니다.