๐Ÿ’ก (Java) HashMap ์ •๋ฆฌ

๋ฐ•ํ˜„์•„ยท2024๋…„ 10์›” 26์ผ
0

๊ธฐ์ดˆ

๋ชฉ๋ก ๋ณด๊ธฐ
16/31

๐Ÿ’ก HashMap ์‚ฌ์šฉํ•˜๊ธฐ

HashMap์€ ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ํ•ด์‹ฑ(Hashing) ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต HashMap์€ ์ž๋ฐ”์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

1. HashMap ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”

HashMap์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด java.util.HashMap ํŒจํ‚ค์ง€๋ฅผ importํ•ด์•ผ ํ•œ๋‹ค.

import java.util.HashMap;

public class Example {
    public static void main(String[] args) {
    
        HashMap<String, Integer> map = new HashMap<>();
    }
}

2. ๊ฐ’ ์ถ”๊ฐ€ (put)

put ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค-๊ฐ’ ์Œ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
.put("key", value)

map.put("apple", 3);
map.put("banana", 2);

3. ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ (get)

get ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
.get("key")

int appleCount = map.get("apple"); // appleCount๋Š” 3์ด ๋ฉ๋‹ˆ๋‹ค.

4. ํ‚ค ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ (containsKey)

ํŠน์ • ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ๋•Œ๋Š” containsKey ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
.containsKey("key")

if (map.containsKey("banana")) {
    System.out.println("๋ฐ”๋‚˜๋‚˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.");
}

5. ํ‚ค์™€ ๊ฐ’ ์‚ญ์ œ (remove)

remove ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ‚ค-๊ฐ’ ์Œ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
.remove("key")

map.remove("apple"); // "apple" ํ‚ค์™€ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

6. HashMap ํฌ๊ธฐ ํ™•์ธ (size)

ํ˜„์žฌ HashMap์— ์ €์žฅ๋œ ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐœ์ˆ˜๋Š” size ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
.size()

int size = map.size(); // ํ˜„์žฌ ์ €์žฅ๋œ ํ•ญ๋ชฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

7. ์ „์ฒด ์ˆœํšŒ

๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด keySet()๊ณผ values(), ๋˜๋Š” entrySet() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

keySet() : ๋ชจ๋“  ํ‚ค๋ฅผ ๋ฐ˜ํ™˜
values() : ๋ชจ๋“  ๊ฐ’์„ ๋ฐ˜ํ™˜
entrySet() : ํ‚ค์™€ ๊ฐ’์„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜

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

public class Example {
    public static void main(String[] args) {
        // HashMap ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
        HashMap<String, Integer> map = new HashMap<>();
        
        // ๊ฐ’ ์ถ”๊ฐ€
        map.put("apple", 3);
        map.put("banana", 2);
        map.put("orange", 5);
        
        // ์ „์ฒด ์ˆœํšŒ ๋ฐ ์ถœ๋ ฅ (keySet ์‚ฌ์šฉ)
        System.out.println("Using keySet:");
        for (String key : map.keySet()) {
            System.out.println(key + ": " + map.get(key));
        }
        
        // ์ „์ฒด ๊ฐ’ ์ˆœํšŒ ๋ฐ ์ถœ๋ ฅ (values ์‚ฌ์šฉ)
        System.out.println("Using values():");
        for (Integer value : map.values()) {
            System.out.println(value);
        }
        
        // ์ „์ฒด ์ˆœํšŒ ๋ฐ ์ถœ๋ ฅ (entrySet ์‚ฌ์šฉ)
        System.out.println("\nUsing entrySet:");
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

Map.Entry<String, Integer>๋ž€?

Map.Entry<String, Integer>๋Š” HashMap์—์„œ ํ‚ค-๊ฐ’ ์Œ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค. HashMap์˜ entrySet() ๋ฉ”์„œ๋“œ๋Š” Map.Entry ๊ฐ์ฒด๋“ค๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด HashMap์˜ ๊ฐ ํ•ญ๋ชฉ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ‚ค์™€ ๊ฐ’์— ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด, keySet()์œผ๋กœ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€ get() ๋ฉ”์„œ๋“œ๋กœ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๋‹ค.

๊ตฌ์กฐ ๋ฐ ํŠน์ง•
Map.Entry<K, V>๋Š” HashMap์˜ ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, ๊ฐ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค:

getKey() : ํ˜„์žฌ ํ•ญ๋ชฉ์˜ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
getValue() : ํ˜„์žฌ ํ•ญ๋ชฉ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์˜ˆ์ œ ์ฝ”๋“œ
์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” entrySet()์„ ์‚ฌ์šฉํ•ด HashMap์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ Map.Entry ๊ฐ์ฒด๋กœ ๊ฐ€์ ธ์™€ ํ‚ค์™€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

public class Example {
    public static void main(String[] args) {
        // HashMap ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
        HashMap<String, Integer> map = new HashMap<>();
        map.put("apple", 3);
        map.put("banana", 2);
        map.put("orange", 5);

        // entrySet() ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค์™€ ๊ฐ’ ์ถœ๋ ฅ
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }
}

์ถœ๋ ฅ ๊ฒฐ๊ณผ

Key: apple, Value: 3
Key: banana, Value: 2
Key: orange, Value: 5

์œ„ ์ฝ”๋“œ์—์„œ entrySet() ๋ฉ”์„œ๋“œ๋Š” HashMap์˜ ๋ชจ๋“  Map.Entry ๊ฐ์ฒด๋“ค๋กœ ๊ตฌ์„ฑ๋œ Set์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ๊ฐ entry ๊ฐ์ฒด์—์„œ getKey()์™€ getValue()๋กœ ํ‚ค์™€ ๊ฐ’์„ ๋™์‹œ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€