Topcit

HashMap์ด๋ž€?

Life Log 2024. 11. 10. 18:30
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก HashMap์ด๋ž€? (Java ์˜ˆ์ œ ํฌํ•จ)

HashMap์€ Java์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ํ‚ค-๊ฐ’(Key-Value) ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. java.util ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋น ๋ฅธ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์ž‘์—…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒŸ HashMap์˜ ํŠน์ง•

  1. ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„:

    • HashMap์€ ์ผ๋ฐ˜์ ์œผ๋กœ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ‚ค์˜ ์ค‘๋ณต ๋ถˆํ—ˆ:

    • ๋™์ผํ•œ ํ‚ค๋กœ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด, ๊ธฐ์กด ๊ฐ’์ด ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ๋ฉ๋‹ˆ๋‹ค.
  3. ์ˆœ์„œ ๋ณด์žฅ ์•ˆ ๋จ:

    • ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•œ ์ˆœ์„œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด LinkedHashMap์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” Java์—์„œ HashMap ์˜ˆ์ œ ์ฝ”๋“œ

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        // HashMap ์ƒ์„ฑ
        HashMap<String, Integer> scores = new HashMap<>();

        // ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
        scores.put("Alice", 85);
        scores.put("Bob", 90);
        scores.put("Charlie", 75);

        // ๊ฐ’ ์กฐํšŒ
        int aliceScore = scores.get("Alice");
        System.out.println("Alice์˜ ์„ฑ์ : " + aliceScore); // ์ถœ๋ ฅ: Alice์˜ ์„ฑ์ : 85

        // ํ‚ค ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
        if (scores.containsKey("Bob")) {
            System.out.println("Bob์˜ ์„ฑ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.");
        }

        // ๋ฐ์ดํ„ฐ ์‚ญ์ œ
        scores.remove("Charlie");

        // HashMap ์ถœ๋ ฅ
        System.out.println("HashMap ๋‚ด์šฉ: " + scores);
    }
}

์ถœ๋ ฅ ๊ฒฐ๊ณผ:

Alice์˜ ์„ฑ์ : 85
Bob์˜ ์„ฑ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
HashMap ๋‚ด์šฉ: {Alice=85, Bob=90}

๐Ÿ”„ ์œ ์‚ฌํ•œ Java ํด๋ž˜์Šค์™€ ๋น„๊ต

ํด๋ž˜์Šค ์„ค๋ช… ํŠน์ง• ๋ฐ ์ฐจ์ด์ 
HashMap ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์˜ ํ‚ค-๊ฐ’ ์ €์žฅ ๊ตฌ์กฐ ์ˆœ์„œ ๋ณด์žฅ ์•ˆ ๋จ, O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„
LinkedHashMap ์ž…๋ ฅ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜๋Š” HashMap์˜ ํ™•์žฅ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ์˜ ์ž…๋ ฅ ์ˆœ์„œ๋ฅผ ์œ ์ง€
TreeMap ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ๋œ ํ‚ค-๊ฐ’ ์ €์žฅ ๊ตฌ์กฐ ํ‚ค๊ฐ€ ์ž๋™์œผ๋กœ ์ •๋ ฌ๋จ, O(log n) ์‹œ๊ฐ„ ๋ณต์žก๋„
Hashtable HashMap๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋™๊ธฐํ™”๋œ ํด๋ž˜์Šค ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์ €ํ•˜

๐Ÿ“ˆ HashMap์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ ์„ค๋ช…
put(key, value) ํ‚ค-๊ฐ’ ์Œ์„ ์ถ”๊ฐ€ ๋˜๋Š” ์—…๋ฐ์ดํŠธ
get(key) ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜
remove(key) ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์‚ญ์ œ
containsKey(key) ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜
containsValue(value) ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜
size() HashMap์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
clear() ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ์„ ์ œ๊ฑฐ

๐Ÿ”„ HashMap๊ณผ Hashtable ๋น„๊ต

Java์—์„œ HashMap๊ณผ Hashtable์€ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

ํŠน์ง• HashMap Hashtable
๋™๊ธฐํ™” ์—ฌ๋ถ€ ๋น„๋™๊ธฐํ™” (synchronized ์•„๋‹˜) ๋™๊ธฐํ™”๋จ (synchronized)
Null ํ—ˆ์šฉ ์—ฌ๋ถ€ ํ‚ค์™€ ๊ฐ’์— null ํ—ˆ์šฉ null ํ—ˆ์šฉ ์•ˆ ๋จ
์„ฑ๋Šฅ ๋” ๋น ๋ฆ„ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
  • Hashtable์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜์ง€๋งŒ, ๋™๊ธฐํ™”๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • HashMap์€ ๋น„๋™๊ธฐํ™”๋˜์–ด ์žˆ์–ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ์‹œ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ๏ธ ๋งˆ๋ฌด๋ฆฌ

HashMap์€ ๋น ๋ฅธ ๊ฒ€์ƒ‰๊ณผ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ, Java์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ConcurrentHashMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ์ž…๋ ฅ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค๋ฉด LinkedHashMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ์ž๋ฃŒ๋Š” ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด์™€ ํ™œ์šฉ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•