๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/๊ตญ๋น„์ง€์›

[D+65] ์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ8 (Set<E> ์ธํ„ฐํŽ˜์ด์Šค, ํ•ด์‰ฌ, TreeSet<E> ์ธํ„ฐํŽ˜์ด์Šค)

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2022. 12. 22.

 

 

๊ตญ๋น„์ง€์› D+65

-  ์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ8 -

 


 

Set<E> ์ธํ„ฐํŽ˜์ด์Šค

- ์ˆ˜ํ•™์˜ ์ง‘ํ•ฉ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

- ์ˆœ์„œ๊ฐ€ ์—†๋‹ค. (์›์†Œ์˜ ๋ฌด์ˆœ์„œ)

- ์ค‘๋ณต์ด ์—†๋‹ค. (์›์†Œ์˜ ์œ ์ผ์„ฑ)

 

• ๋™์ผ๋ฐ์ดํ„ฐ์˜ ํŒ๋‹จ

set์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ค‘๋ณต์ด ์—†๋Š” ์œ ์ผ์„ฑ์ด๋ผ๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— equals()์™€ hashCode()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด์„œ ํ†ต์ผ๋ฐ์ดํ„ฐ๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

์ฆ‰, ๋จผ์ € ๋ฐ์ดํ„ฐ์—๋Œ€ํ•œ hashCode๋ฅผ ๊ตฌํ•œ๋‹ค์Œ equals๋กœ ํ•ด์‰ฌ๊ฐ’์„ ๋น„๊ตํ•ด ๋™์ผ๋ฐ์ดํ„ฐ๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

 

• hashCode์˜ ๋“ฑ์žฅ๋ฐฐ๊ฒฝ

set์ธํ„ฐํŽ˜์ด์Šค๋Š” ์œ ์ผ์„ฑ์„ ๋งŒ์กฑํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ๋งŒ์•ฝ n๋ฒˆ์งธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ๋•Œ n-1๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.

์ ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฒฝ์šฐ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

๋˜ํ•œ, ๋ฐ์ดํ„ฐ๊ฐ€ ์งง์€ ๊ฒฝ์šฐ์—” ๋‹จ์ˆœ๊ฐ’์„ ๋น„๊ตํ•ด ๋™์ผ๋ฐ์ดํ„ฐ๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํด ๊ฒฝ์šฐ์— ๋น„๊ต๋ฃจํ‹ด ์ž์ฒด์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋น„๊ตํšŸ์ˆ˜์™€ ๋ฐ์ดํ„ฐ์˜ ๋น„๊ต์— ๋Œ€ํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด hashCode์ด๋‹ค.

 

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

 

๋˜ํ•œ ๋ฐ์ดํ„ฐ์˜ ๋น„๊ต๋Š” ํ•ด์‰ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด์„œ ๊ฐ๊ฐ์˜ ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๊ฐ’(ํ•ด์‰ฌ๊ฐ’)์œผ๋กœ ์„ค์ •ํ•ด์ค€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด ์ฃผ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

(์ž์„ธํ•œ ์ •๋ณด๋Š” ์•„๋ž˜์— ์„ค๋ช…ํ•˜๋Š” ํ•ด์‰ฌ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ฐธ๊ณ ํ•  ๊ฒƒ)

 

์ด๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์—์„œ ๋‚˜๋ˆ„๋Š” ๊ฐ’์ด ํด ๊ฒฝ์šฐ ๋‚˜๋ˆ„๋Š” ๊ฐ’์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๋Š”๋ฐ ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์ด๋Š” ๊ฐ ๋ฐ”๊ตฌ๋‹ˆ๋งˆ๋‹ค ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ธฐ์— hashCode๋Š” Hash๊ฐ€ ์•„๋‹๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” hashCode๋Š” ๊ฒ€์ƒ‰์†๋„๋ฅผ ์ค„์ด๊ธฐ์œ„ํ•ด ๋ฐ”๊ตฌ๋‹ˆ ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์™„๋ฒฝํ•œ Hash๋ผ๊ณ  ๋ณด๊ธฐ์—” ์–ด๋ ต๋‹ค.

์ฆ‰, ์™„๋ฒฝํ•œ Hash๋ผ๊ณ  ๋ณด๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ๋‚˜๋ˆ„๋Š” ๊ฐ’์„ ํฌ๊ฒŒ ์„ค์ •ํ•ด์ค„ ๊ฒฝ์šฐ์— Hash์˜ ์œ ๋‹ˆํฌํ•œ ์„ฑ๊ฒฉ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— hashCode๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 


ํ•ด์‰ฌ

์ž„์˜์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋น„ํŠธ์—ด์„ ์ž…๋ ฅ๋ฐ›์•„์„œ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ์œ ๋‹ˆํฌํ•œ ๋น„ํŠธ์—ด์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

• Hash Algorithm

ํ•ด์‰ฌ๋Š” ์ž„์˜์˜ ๋‹ค๋ฅธ ๋‘๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ Hash Algorithm์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋  ๊ฒฝ์šฐ, ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ๊ฐ๊ฐ์˜ ํ•ด์‰ฌ๊ฐ’์€ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

๋˜ํ•œ Hash Algorithm์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋‘ ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์Šทํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์„์ง€๋ผ๋„ ํ•ด์‰ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋‚˜์˜จ ํ•ด์‰ฌ๊ฐ’์€ ์™„์ „ ๋‹ค๋ฅธ ๋น„ํŠธ์—ด์„ ๋‚ด๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Hash Algorithm์„ ํ†ต๊ณผํ•œ ๋น„ํŠธ์—ด์€ ๊ณ ์ •๋œ ๋น„ํŠธ์—ด๊ณผ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ• ๋•Œ ํŽธ๋ฆฌํ•˜๋‹ค.

 

• Hash ํŠน์ง•

- ์—ญ์ƒ์ €ํ•ญ์„ฑ : ํ•ด์‹œ๊ฐ’์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ํ•ด์‹œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ์ž…๋ ฅ๊ฐ’์„ ์•Œ์•„๋‚ด๊ธฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

- ์ œ2 ์—ญ์ƒ ์ €ํ•ญ์„ฑ : ์–ด๋–ค ์ž…๋ ฅ๊ฐ’๊ณผ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋‹ค๋ฅธ ์ž…๋ ฅ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. (ํ•ด์‹œ ๊ฐ’์„ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์›๋ž˜ ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ด๋‹ค)

- ์ถฉ๋Œ ์ €ํ•ญ์„ฑ : ํ•ด์‹œ๊ฐ’์ด ๊ฐ™์€ ์ž…๋ ฅ ๊ฐ’ ๋‘ ๊ฐœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. (ํ•ด์‹œ ๊ฐ’์ด ๋ฌด์—‡์ด๋“  ๊ทธ ๊ฐ’์„ ์•Œ๋˜ ๋ชจ๋ฅด๋˜ ํŠน์ •ํ•˜๊ฒŒ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ๊ฐ’ ๋‘ ๊ฐœ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด ๋ฌธ์ œ์ด๋‹ค)

 

 


TreeSet<E> ์ธํ„ฐํŽ˜์ด์Šค

- Set์˜ ๊ธฐ๋ณธ์ ์ธ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

- ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ €์žฅํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ด๋‹ค. (๋‹จ์ˆœํžˆ ๋“ค์–ด๊ฐ„๊ฒƒ์œผ๋กœ ์ •๋ ฌ์— ๋Œ€ํ•œ ๊ธฐ์ค€์ด ์—†๋Š” ์ƒํƒœ)

- ์ •๋ ฌ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ €์žฅ๋˜๋Š” ํด๋ž˜์Šค๋Š” comparable<T> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implementํ•ด์•ผํ•œ๋‹ค.

- ๋ณ„๋„์˜ ์ •๋ ฌ๊ธฐ์ค€์„ ์ œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” comparator<T> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

• ์žฅ๋‹จ์ 

- ์žฅ์  : ๊ฒ€์ƒ‰์ด ๋น ๋ฅด๋‹ค.

- ๋‹จ์  : ์ •๋ ฌ๊ธฐ์ค€์— ๋งž๊ฒŒ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ์ด ๋Š๋ฆฌ๋‹ค.

 

• ์ •๋ ฌ๊ธฐ์ค€์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

TreeSet์— ๋Œ€ํ•œ ์ •๋ ฌ๊ธฐ์ค€์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ Comparator๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ณ„๋„์˜ Class๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•˜๋ฉฐ, TreeSet์„ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ TreeSet์˜ ์ƒ์„ฑ์ž ์•ˆ์— ์ •๋ ฌ๊ธฐ์ค€์— ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€