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() ๋ฉ์๋๋ฅผ ํจ๊ป ์ฌ์ ์ ํด์ผํ๋ค.
๋ฐ๋ผ์ HashMap์ ๋ด๋ถ์ ์ผ๋ก ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋์ผํ key, ์ธ์คํด์ค๋ก ๋ง๋ค๊ณ ์ถ์ผ๋ฉด ๋ ๋ฉ์๋๋ฅผ ํจ๊ป ์ฌ์ ์ ํ๋ค.
์ฐธ๊ณ : https://www.codelatte.io/courses/java_programming_basic/KW7N6AHSIJ00UUS4
Last updated