CodeGym /Java Course /์ž๋ฐ” ์ปฌ๋ ‰์…˜ /์ง€๋„ ๊ณ„์ธต

์ง€๋„ ๊ณ„์ธต

์ž๋ฐ” ์ปฌ๋ ‰์…˜
๋ ˆ๋ฒจ 7 , ๋ ˆ์Šจ 5
์‚ฌ์šฉ ๊ฐ€๋Šฅ

"๋งˆ์ง€๋ง‰์œผ๋กœ ์ง€๋„์— ๋Œ€ํ•ด ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค."

"์•„์‹œ๋‹ค์‹œํ”ผ ์ง€๋„๋Š” ํ‚ค-๊ฐ’ ์Œ ์„ธํŠธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋Š” ๊ณ ์œ ํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ฐ’์€ ๋ฌด์—‡์ด๋“  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค-๊ฐ’ ์Œ์„ ์ง€๋„์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ปฌ๋ ‰์…˜์— ์ด๋ฏธ ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์ด์ „ ๊ฐ’์€ ์ƒˆ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ , ํ‚ค๋Š” ๋ชจ๋“  ๊ฐœ์ฒด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค ."

๋งต์€ (x, y) ์Œ์˜ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜ํ•™ ์šฉ์–ด์ด๋ฉฐ ๊ฐ ๊ณ ์œ  x๋Š” ์ผ๋ถ€ y์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” Map์„ ๋งค์šฐ ์ข‹์•„ํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋Š” Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” 4๊ฐ€์ง€ ์ปฌ๋ ‰์…˜์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

"๊ฐ„๋‹จํ•œ ์ƒ์† ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."

๋งต ๊ณ„์ธต ๊ตฌ์กฐ - 1

"๋…ธ๋ž€์ƒ‰์€ Entry ๊ฐ€ Map ์ธํ„ฐํŽ˜์ด์Šค ์˜ ์ค‘์ฒฉ๋œ ์ธํ„ฐํŽ˜์ด์Šค์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค ."

"์š”์†Œ ์Œ์„ ๋‹จ์ผ ์—”ํ„ฐํ‹ฐ๋กœ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค."

"Map<K,V>์˜ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."

ํ–‰๋™ ์–‘์‹ ์„ค๋ช…
int size() ๋งต์˜ ์Œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
boolean isEmpty() ๋งต์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
boolean containsKey(Object key) ๋งต์— ์ง€์ •๋œ ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
boolean containsValue(Object value) ๋งต์— ์ง€์ •๋œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
V get(Object key) ์ง€์ •๋œ ํ‚ค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
V put(K key, V value) ํ‚ค์˜ ์ƒˆ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๋ฉ”์„œ๋“œ๋Š” ์ด์ „ ๊ฐ’ ๋˜๋Š” null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
putAll(Map<? extends K, ? extends V> m) ๋‹ค๋ฅธ ๋งต์—์„œ ์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
void clear() ๋งต์„ ์ง€์›๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ์Œ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
Set<K>keySet() ํ‚ค ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Collection<V>values() ๊ฐ’ ๋ชจ์Œ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Set<Map.Entry<K, V>>entrySet() ์Œ์˜ ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

"K์™€ V๋Š” ํ‚ค์™€ ๊ฐ’์˜ ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค."

"๊ธ€์Ž„, ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฉ๋ฒ•์— ์ต์ˆ™ํ•˜์ง€๋งŒ ๊ทธ ์ค‘ ์ผ๋ถ€๋งŒ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค."

"์—”ํŠธ๋ฆฌ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ๋” ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"

"์ด ํด๋ž˜์Šค๋Š” ํ•œ ์Œ์˜ ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค."

ํ–‰๋™ ์–‘์‹ ์„ค๋ช…
getKey() ํ‚ค-๊ฐ’ ์Œ์˜ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
getValue() ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
setValue(V value) ํ‚ค-๊ฐ’ ์Œ์— ์ƒˆ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

"๋งต ์ „์ฒด๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ํ•œ ์Œ์„ ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด ์ง„์ž…์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค."

"์•Œ๊ฒ ์–ด์š”."

"์ด์ œ ์ง€๋„ ๊ตฌํ˜„์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค."

"์ฒซ ๋ฒˆ์งธ๋Š” HashMap ์ž…๋‹ˆ๋‹ค . ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ‚ค์™€ ๊ฐ’์€ null๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์œ ํ˜•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์†Œ์˜ ์ˆœ์„œ๋Š” ์ปฌ๋ ‰์…˜์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ."

"์š”์†Œ๋Š” HashMap์— ๊ทธ๋ฃน ๋˜๋Š” ๋ฒ„ํ‚ท ์„ธํŠธ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์š”์†Œ์˜ hashCode() ๋ฉ”์„œ๋“œ๋Š” ์š”์†Œ๊ฐ€ ์†ํ•˜๋Š” ๋ฒ„ํ‚ท์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค."

"๋งค์šฐ ๋Œ€๋žต์ ์œผ๋กœ ๋งํ•˜๋ฉด 1์—์„œ 100๊นŒ์ง€์˜ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฒ„ํ‚ท์— ์†ํ•˜๊ณ  101์—์„œ 200๊นŒ์ง€์˜ ๊ฐ’์„ ๊ฐ€์ง„ ์š”์†Œ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฒ„ํ‚ท์— ์†ํ•ฉ๋‹ˆ๋‹ค."

"์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์š”์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ํฌ์ธํŠธ๋Š” ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ๋•Œ ๊ด€๋ จ ์—†๋Š” ๋ฒ„ํ‚ท์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค."

"์•Œ๊ฒ ์–ด์š”."

"HashMap์— ๋Œ€ํ•œ ์ •๋ง ์ข‹์€ ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ์–ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"๋‘ ๋ฒˆ์งธ ์ปฌ๋ ‰์…˜์€ LinkedHashMap ์ž…๋‹ˆ๋‹ค. HashMap๊ณผ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ํ•ญ๋ชฉ์„ ์—ฐ๊ฒฐ๋œ ๋ชฉ๋ก์œผ๋กœ ์ €์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ HashMap์—์„œ๋Š” ์š”์†Œ์˜ ์ˆœ์„œ๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์œผ๋ฉฐ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  LinkedHashMap์—์„œ ๋ฐ˜๋ณต์ž๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LinkedHashMap์— ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ LinkedHashMap์—๋Š” ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ/ํ™œ๋™ ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋“  ์Œ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ณต์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค."

"LinkedHashMap์— ๋Œ€ํ•œ ์ •๋ง ์ข‹์€ ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"์˜ค๋Š˜ ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์€ ์„ธ ๋ฒˆ์งธ ์ปฌ๋ ‰์…˜์€ TreeMap ์ž…๋‹ˆ๋‹ค ."

" TreeMap์€ ์š”์†Œ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” TreeMap์ด ๊ท ํ˜• ์žกํžŒ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค."

"๊ฒฐ๊ณผ์ ์œผ๋กœ ์‚ฝ์ž… ์‹œ๊ฐ„๊ณผ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ๋งค์šฐ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํƒ์›”ํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค."

"๋ฌผ๋ก  TreeMap์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

"๋‚ด๊ฐ€ ์•„์ง ๋งํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?"

"WeakHashMap์ด์ง€๋งŒ Rishi๋Š” ๋ฉฐ์น  ์ „์— ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค."

"์–ธ์ œ์˜€์–ด?"

"๊ทธ๊ฐ€ SoftReference, WeakReference ๋ฐ PhantomReference์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์„ ๋•Œ."

"๋‹น์‹ ์ด ์ด๋ฆ„์„ ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋ฉด ๋‹น์‹ ์„ ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ํŽธ์•ˆํžˆ ์‰ฌ์‹ญ์‹œ์˜ค. ์˜ค๋Š˜ ๋ฐค์— ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค."

"์•ˆ๋…•, ์—˜๋ฆฌ."

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION