HashMap

ํ•ด์‹œ ํ…Œ์ด๋ธ”

์ž๋ฐ”์—์„œ๋Š” HashMap, ํŒŒ์ด์ฌ์—์„œ๋Š” dictionary๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์จ key-value ์Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

hash function์— key๊ฐ’์„ ๋„ฃ์–ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ๊ณ ์œ ์˜ index๋กœ key-value๋กœ ์ €์žฅํ•œ๋‹ค.

search, insert, delete ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ชจ๋‘ O(1)์ด๋‹ค.

Direct Address Table

key๊ฐ’์ด ์ธ๋ฑ์Šค์ธ ๊ฒฝ์šฐ๋ฅผ Direct Address Table ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋งŒ์•ฝ key๊ฐ€ 5๋งŒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ์ด์ „์˜ buket๋“ค์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๋˜ key๊ฐ€ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ index๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” Hash Table์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Hash Table

key๋ฅผ index์— ๋งž๊ฒŒ ๋ณ€ํ™˜ ์‹œ์ผœ์ฃผ๋Š” hash function์„ mapping table๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

key๋ฅผ index๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ key๋ฅผ hash function์— ๋„ฃ์–ด ๋‚˜์˜จ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ index๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

์žฅ์ 

key๊ฐ€ index๋กœ ๋ณ€ํ™˜๋˜์–ด์„œ buket์— ๋Œ€์‘ํ•˜๋Š” ์œ„์น˜์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ํ˜•์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ArrayList, LinkedList ๋ณด๋‹ค ๊ฒ€์ƒ‰์ด ๋น ๋ฅด๋‹ค.

๋‹จ์ 

  • bucket์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด ๋” ํฐ ํ•ด์‹œ๋งต์œผ๋กœ ์กฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ฐ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

  • ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.

  • key๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

์ฃผ์˜ํ•  ์ 

๋‹ค์–‘ํ•œ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์„ key๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ index๋ฅผ ์ƒ์„ฑํ•  ๋•Œ Object.hashCode()์— ์˜์กดํ•˜๋ฏ€๋กœ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™์ผํ•œ ๊ฐ์ฒด๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ Object๋ฅผ key๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ๊ฐ ํ–ˆ๋˜๊ฑฐ์™€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๋™์ผํ•œ key์ผ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์“ด๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์˜ map์˜ size()๋Š” 1์ด ๋˜์–ด์•ผ ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” 2๊ฐ€ ๋‚˜์™”๋‹ค.

Person ์ธ์Šคํ„ด์Šค์˜ name๊ณผ age๊ฐ€ ๊ฐ™์•„์„œ ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ hashcode์˜ ๊ฐ’์ด ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— HashMap์— ์ค‘๋ณต ์—†์ด ์ €์žฅ๋œ๋‹ค.

"๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค." ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฐ™์€ ์˜๋ฏธ์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” Object.equals() ๋ฉ”์†Œ๋“œ์™€ Object.hashCode() ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์žฌ์ •์˜ ํ•ด์•ผํ•œ๋‹ค.

equals() & hashCode()

๋”ฐ๋ผ์„œ HashMap์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ key, ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์žฌ์ •์˜ ํ•œ๋‹ค.

์ฐธ๊ณ  : https://www.codelatte.io/courses/java_programming_basic/KW7N6AHSIJ00UUS4arrow-up-right

Last updated