Post

๐Ÿ’š ์ž๋ฃŒ๊ตฌ์กฐ - HashMap๊ณผ ํ•ด์‹œ ์ถฉ๋Œ

๐Ÿ’š ์ž๋ฃŒ๊ตฌ์กฐ - HashMap๊ณผ ํ•ด์‹œ ์ถฉ๋Œ

HashMap

key, value ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

HashMap์€ ํ•˜๋‚˜์˜ key๊ฐ€ ํ•˜๋‚˜์˜ value์— ๋งคํ•‘๋˜๋„๋ก ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ.

  • ์˜ˆ์‹œ) ์ฃผ๋ฏผ๋ฒˆํ˜ธ

์˜ˆ์‹œ๋กœ, ํ•™์ƒ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•  ๋•Œ:

  • key: ํ•™์ƒ ๊ณ ์œ  ๋ฒˆํ˜ธ
  • value: ํ•™์ƒ์˜ ์„ธ๋ถ€ ์ •๋ณด (์˜ˆ: ์ด๋ฆ„)
1
2
3
1 : ์ด๋‚˜์˜
2 : ์ด๋‘์œ 
3 : ์ตœ๊ธ€๋Œ€

์—ฌ๊ธฐ์„œ number๊ฐ€ key๋ผ๋ฉด, value๋Š” ๊ทธ ํ•™์ƒ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•จ.

HashMap์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฐฑ์‹ , ํƒ์ƒ‰์ด ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์ ์ด๋‹ค.

ํŠน์ง•

์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฉฐ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1) ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ๊ตญ์˜ ์˜ˆ๋Šฅ์ธ ์ธ๊ธฐ ํˆฌํ‘œ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๊ฒ ๋‹ค. ํˆฌํ‘œ ์ฐธ์—ฌ์ž๊ฐ€ ์ „ ๊ตญ๋ฏผ 5,500๋งŒ ๋ช…์ผ ๋•Œ, key๋ฅผ ์ด๋ฆ„, value๋ฅผ ๋“ํ‘œ์ˆ˜๋กœ ์„ค์ •ํ•ด HashMap์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋งค๋ฒˆ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•ด ์ƒˆ๋กœ์šด ๋“ํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์ด ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์ด๋ฅผ List ๊ตฌ์กฐ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์นด์šดํŠธํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•ด์ง€์ง€๋งŒ, HashMap์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ด๋ฆ„์ด ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค ๋น ๋ฅด๊ฒŒ ์นด์šดํŠธํ•  ์ˆ˜ ์žˆ์–ด ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ 

HashMap์˜ ์žฅ์ ์€ ์‚ฝ์ž…/์‚ญ์ œ/๊ฐฑ์‹ /ํƒ์ƒ‰์„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋„ ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

HashMap (Hash table)

  • ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„

1

  • ํ•ด์‹œ ํ•จ์ˆ˜(hash function) : key๋ฅผ ๋ฐฐ์—ด ํฌ๊ธฐ ๋‚ด์˜ ์ธ๋ฑ์Šค๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜

key๊ฐ€ ๋ฌธ์ž์—ด, ์ด๋‚˜์˜์ด ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•  ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์— ์ €์žฅ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ. ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์ด key๋ฅผ index์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” integer ์ •์ˆ˜๋กœ ๋ฐ”๊พธ์–ด ์ฃผ๊ฒŒ ๋˜๊ณ  ์ด ์ •์ˆ˜๋ฅผ ํ†ตํ•ด ์ ์ ˆํ•œ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜๋Š” ๊ฒƒ.

๋‚ด๋ถ€ ๊ตฌํ˜„

1

์ด๋ฏธ์ง€ ์ถœ์ฒ˜

๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„

๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด key์˜ hash๋ฅผ ๊ตฌํ•ด์•ผํ•จ

hash function์œผ๋กœ key์˜ hash๋ฅผ ๊ตฌํ•จ

๊ตฌํ•ด์ง„ hash๋ฅผ ๋ฐฐ์—ด ์‚ฌ์ด์ฆˆ๋กœ modular(%) ํ•œ ๊ฐ’์„ index๋กœ ์‚ฌ์šฉ

  • hash map ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” hash function์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์€ ์ •์ˆ˜์—ฌ์•ผ ๋œ๋‹ค.
1
2
3
4
array[hf(key) % M] = value

hf : hash function,
M : hash_map size

์—ฌ๊ธฐ์„œ hf๋Š” ํ•ด์‹œ ํ•จ์ˆ˜(hash function)๋กœ, key๋ฅผ ํŠน์ • ๋ฐฐ์—ด ํฌ๊ธฐ ๋‚ด์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, key๊ฐ€ ๋ฌธ์ž์—ด โ€œ์ด๋‚˜์˜โ€์ด๋ผ๋ฉด, ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์ด key๋ฅผ ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜ํ˜• ์ธ๋ฑ์Šค๋กœ ๋ฐ”๊ฟ” ์ ์ ˆํ•œ ์œ„์น˜์— ํ•ด๋‹น ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

ํ•ด์‹œ ์ถฉ๋Œ( Hash Collision)

1

HashMap์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ key๋“ค์ด ๊ฐ™์€ hash๋ฅผ ๊ฐ€์งˆ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ํ•ด์‹œ ์ถฉ๋Œ์ด๋‹ค.

  1. key1!=key2 ์ด์ง€๋งŒ hf(key1)==hf(key2)

  2. hf(key1) != hf(key2) ์ด์ง€๋งŒ hf(key1) % M == hf(key2) % M

1๋ฒˆ์˜ ๋ฐฉ๋ฒ• ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 2๋ฒˆ์˜ ๋ฐฉ๋ฒ•๋„ ํ•ด์‹œ ์ถฉ๋Œ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด์‹œ ์ถฉ๋Œ์ด ์™œ ๋ฐœ์ƒํ• ๊นŒ?

  • ์™„๋ฒฝํ•œ ํ•ด์‹œ ํ•จ์ˆ˜(perfect hash function) ๊ตฌํ˜„์˜ ์–ด๋ ค์›€

    • perfect hash function: key1 โ‰  key2์ผ ๋•Œ hf(key1) โ‰  hf(key2)๋ฅผ ๋งŒ์กฑํ•˜๋Š” ํ•ด์‹œ ํ•จ์ˆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ ๋Š” ํ•ด์‹œ ํ•จ์ˆ˜์˜ ํŠน์„ฑ์ƒ ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ๊ฑฐ์˜ ๋ฌดํ•œ๋Œ€๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž…๋ ฅ๊ฐ’์€ ๋ณดํ†ต ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด ๊ฐ€๋Šฅํ•œ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ๋„“์ง€๋งŒ, ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ์€ 4๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ์ •์ˆ˜ํ˜• ๊ฐ’์œผ๋กœ ์ œํ•œ๋œ๋‹ค. ์ฆ‰, ๋ฌดํ•œ๋Œ€์— ๊ฐ€๊นŒ์šด ์ž…๋ ฅ๊ฐ’์„ 4๋ฐ”์ดํŠธ์˜ ์ œํ•œ๋œ ๊ณต๊ฐ„์œผ๋กœ ๋งคํ•‘ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งˆ์น˜ 7์ธ์Šน ์ฐจ์— 20~30๋ช…์„ ํƒœ์šฐ๋ ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„ ์ฆ‰, ์ œํ•œ๋œ ๊ณต๊ฐ„ ๋‚ด์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค.
  • key์˜ ์‚ฌ์ด์ฆˆ์— ๋น„ํ•ด HashMap ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ

    • ์šฐ๋ฆฌ๋‚˜๋ผ ์ธ๊ตฌ๊ฐ€ 5,500๋งŒ ๋ช…์ด์ง€๋งŒ, ๋‚ด ์„œ๋น„์Šค ๊ฐ€์ž…์ž๋ฅผ ๋ชจ๋‘ 5,500๋งŒ ๋ช…์œผ๋กœ ์˜ˆ์ƒํ•˜์—ฌ HashMap์„ ์„ค์ •ํ•œ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ HashMap ํฌ๊ธฐ๋ฅผ ์•ฝ 2์ฒœ ๊ฐœ๋กœ ์žก๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ์›๋ž˜ key์˜ ๋ฒ”์œ„์ธ 5,500๋งŒ์— ๋น„ํ•ด ๋งตํ•‘ํ•  ํฌ๊ธฐ๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ์„œ๋น„์Šค๋ฅผ ์‹ค์ œ๋กœ ๋ˆ„๊ฐ€ ์‚ฌ์šฉํ• ์ง€๋Š” ์•Œ ์ˆ˜ ์—†๊ณ , ๊ฐ€๋Šฅํ•œ 5,500๋งŒ ๊ฐœ์˜ ๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค, 2์ฒœ ๊ฐœ ํฌ๊ธฐ๋กœ modular ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ œํ•œ๋œ ํฌ๊ธฐ์ธ 2์ฒœ ๊ฐœ ์•ˆ์— ์ˆ˜๋งŽ์€ key๋ฅผ ๋งคํ•‘ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋ฐ–์— ์—†๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ modular ์—ฐ์‚ฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ํ•ญ์ƒ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•ด์‹œ ์ถฉ๋Œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

1

1 ์ด๋ฏธ์ง€ ์ถœ์ฒ˜

๊ฐœ๋ณ„ ์ฒด์ด๋‹(Separate chaining) : ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹

  • Linked List ์‚ฌ์šฉ

    • ๊ฐœ๋ณ„ ์ฒด์ด๋‹์€ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ถœ๋™์ด ๋ฐœ์ƒํ•œ โ€˜์œค์•„โ€™์™€ โ€˜์„œํ˜„โ€™์€ ๋‹ค์Œ ์•„์ดํ…œ์ด โ€˜์„œํ˜„โ€™์ธ ํ˜•ํƒœ๋กœ ์„œ๋กœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

      1. ํ‚ค์˜ ํ•ด์‹œ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.
      1. ํ•ด์‹œ ๊ฐ’์„ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•œ๋‹ค.
      1. ๊ฐ™์€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.
    • ๋‹จ์  : ๊ตฌํ˜„์„ ์ž˜ํ–ˆ๋‹ค๋ฉด ํƒ์ƒ‰์€ O(1)์ด์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ, ๋ชจ๋“  ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•˜๋ฉด O(n)์ด ๋œ๋‹ค.

1 ์ด๋ฏธ์ง€ ์ถœ์ฒ˜

ํ•ด๋‹น ์ด๋ฏธ์ง€๋Š” ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ์˜ ์„ ํ˜• ํƒ์‚ฌ(Linear Probing) ๋ฐฉ์‹์ž„.

์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ(Open addressing) : ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์ธ์ ‘ํ•œ ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„(bucket)์— ์ €์žฅ

  • ์„ ํ˜• ํƒ์‚ฌ(Linear probing) : ๊ณ ์ •ํญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์Œ

    • ์„ ํ˜• ํƒ์‚ฌ ๋ฐฉ์‹์€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์œ„์น˜๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์‚ฌ๋ฅผ ํ•˜๋‚˜์”ฉ ์ง„ํ–‰ํ•จ. ํŠน์ • ์œ„์น˜์— ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๊ทธ ๋‹ค์Œ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹. ์ด๋ ‡๊ฒŒ ํƒ์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์‚ฝ์ž…ํ•˜๊ฒŒ ๋จ. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋‹ค์Œ ๋นˆ ์œ„์น˜๋ฅผ ํƒ์‚ฌํ•ด ์ƒˆ ํ‚ค๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    • ๋‹จ์  : ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์ง€ ์•Š๊ณ  ๋ญ‰์น˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Œ. ํ•ด์‹œ ํ…Œ์ด๋ธ” ์ด๊ณณ ์ €๊ณณ์— ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃน์ด ์ƒ๊ธฐ๋Š” ํ˜„์ƒ์„ ํด๋Ÿฌ์Šคํ„ฐ๋ง(Clustering)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ํด๋Ÿฌ์Šคํ„ฐ๋“ค์ด ์ ์  ์ปค์ง€๊ฒŒ ๋˜๋ฉด ์ธ๊ทผ ํด๋Ÿฌ์Šคํ„ฐ๋“ค๊ณผ ์„œ๋กœ ํ•ฉ์ณ์ง€๋Š” ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์œ„์น˜์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆฌ๊ณ , ๋‹ค๋ฅธ ์œ„์น˜์—๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ˜„์ƒ์€ ํƒ์‚ฌ ์‹œ๊ฐ„์„ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ํ•˜๊ณ  ์ „์ฒด์ ์œผ๋กœ ํ•ด์‹ฑ ํšจ์œจ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ์›์ธ์ด ๋œ๋‹ค.

    • ์ฃผ์˜ํ•  ์  : ์ค‘๊ฐ„ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” key์˜ ์‚ญ์ œ ์‹œ, ์ด๋ฏธ ์žˆ๋Š” ๊ฐ’๋„ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Œ.

      • ํ•ด๊ฒฐ์ฑ… : ์‚ญ์ œ ์‹œ DELETE ๊ฐ™์€ ์ƒ์ง•์ ์ธ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ
        • DELETE ํ‘œ์‹œ๋ฅผ ๋ณด๊ณ  ๋‹ค์Œ ์œ„์น˜๋„ ํ™•์ธํ•ด๋ด์•ผํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Œ. ๋‹จ์  : DELETE๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฌด์กฐ๊ฑด ๋‹ค์Œ ์œ„์น˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ.

        • ์‚ญ์ œ ์œ„์น˜ ๋‹ค์Œ์˜ open addressing๋œ key๋“ค์€ ํ•œ ๋‹จ๊ณ„์”ฉ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค. ๋‹จ์  : ์ด๋™์‹œํ‚ค๋Š” ์ถ”๊ฐ€์ ์ธ ๋น„์šฉ ๋ฐœ์ƒ.

  • ์ œ๊ณฑ ํƒ์‚ฌ(Quadratic probing) : ์ œ๊ณฑ์ˆ˜๋งŒํผ ์ด๋™ํ•˜์—ฌ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์Œ

  • ์ด์ค‘ ํ•ด์‹ฑ(Double Hashing) : ๋˜ ๋‹ค๋ฅธ hash function์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์Œ

Java์—์„œ๋Š” ํ•ด์‹œ ์ถฉ๋Œ์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ์„๊นŒ?

  • jdk7๊นŒ์ง€๋Š” linked list๋ฅผ ์‚ฌ์šฉํ•œ separate chaining์„ ํ™œ์šฉ

  • jdk8์—์„œ linked list์™€ red black tree๋ฅผ ํ˜ผ์šฉํ•œ separate chaining์„ ํ™œ์šฉ

์ •๋ฆฌ

HashMap์€ ๋ฐฐ์—ด์ด ์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ์„ ํ™œ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฐฑ์‹ , ์กฐํšŒ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ธ๋ฑ์Šค๊ฐ€ ์–‘์˜ ์ •์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ œํ•œ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ HashMap์—์„œ๋Š” ๋‹ค์–‘ํ•œ key ๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ key๋ฅผ ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋กœ ๋ฐ”๊ฟ”์ฃผ์–ด, ๊ทธ ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

This post is licensed under CC BY 4.0 by the author.