๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅDEV/Java || Spring

TreeSet

by bdd 2022. 2. 22.

1. TreeSet


์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree) ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค. ์ •๋ ฌ, ๊ฒ€์ƒ‰/๋ฒ”์œ„๊ฒ€์ƒ‰์— ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์ด๋ฉฐ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ Red-Black tree ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ •๋ ฌ๋œ ์œ„์น˜์— ์ €์žฅํ•˜๋ฏ€๋กœ ์ €์žฅ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. 

 

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ Object ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜ ํ•˜๋‚˜์™€ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐœ์˜ ์ฐธ์กฐ๋ณ€์ˆ˜

 

 

 

 

 

 

 

 

์ฒซ ๋ฒˆ์งธ๋กœ ์ €์žฅ๋˜๋Š” ๊ฐ’์€ ๋ฃจํŠธ๊ฐ€ ๋˜๊ณ , ๋‘ ๋ฒˆ์งธ ๊ฐ’์€ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ํŠธ๋ฆฌ๋ฅผ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ‘๋‹ˆ๋‹ค. ์ด๋•Œ ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ์—, ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ๋Š” ๊ฐ’์„ ์Šค์Šค๋กœ ๋ชป ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— Comparable ํ˜น์€ Comparator๋ฅผ ์ œ๊ณตํ•ด ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•  ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด TreeSet์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

 

 

 

 

์™ผ์ชฝ ๋งˆ์ง€๋ง‰ ๊ฐ’์—์„œ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ ๊ฐ’๊นŒ์ง€ ๊ฐ’์„ [ ์™ผ์ชฝ ๋…ธ๋“œ -> ๋ถ€๋ชจ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ ] ์ˆœ์œผ๋กœ ์ฝ์–ด์˜ค๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋…ธ๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TreeSet์€ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ๊ฐ’ ๊ฒ€์ƒ‰๊ณผ ๋ฒ”์œ„๊ฒ€์ƒ‰์ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. * ์ €์žฅ๋œ ๊ฐ’์˜ ๊ฐœ์ˆ˜์— ๋น„๋ก€ํ•ด ๊ฒ€์ƒ‰์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

 

์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ ํŠธ๋ฆฌ

 

 

 

 

 

 

 

๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ €์žฅ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ์ €์žฅํ•ด์•ผํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ํŠธ๋ฆฌ์˜ ์ผ๋ถ€๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€/์‚ญ์ œ ์‹œ๊ฐ„์€ ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์ด๋‚˜ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ๊ธฐ๋Šฅ์ด ๋” ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree)๋Š”
    - ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
    - ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ์˜ ๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ ๊ฐ’๋ณด๋‹ค ์ž‘๊ณ  ์˜ค๋ฅธ์ชฝ์ž์‹๋…ธ๋“œ์˜ ๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ปค์•ผํ•œ๋‹ค.
    - ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ์˜ ์ถ”๊ฐ€ ์‚ญ์ œ์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. 
    - ๋ฒ”์œ„๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์— ์œ ๋ฆฌํ•˜๋‹ค.
    - ์ค‘๋ณต๋œ ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 

 

 

 

 

 

๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ๋•Œ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๊ฐ’์„ ์ •๋ ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ, ์Šค์Šค๋กœ ์ •๋ ฌํ•˜๋Š” ๋Œ€์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•  ๋•Œ ๋“œ๋Š” ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์ด ์ถ”๊ฐ€๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. **์ฝ๊ธฐ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒํ•˜๋ฉด์„œ ์“ฐ๊ธฐ์— ์•ฝํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

2. ๋ถ€๋ถ„๊ฒ€์ƒ‰(subset)


๋ถ€๋ถ„๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ. ์ด๋Š” Set์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ์—†๋Š” TreeSet๋งŒ์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TreeSet<String>์„ Set<String>์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

 

 

 

 

 

 

์ƒ์† ๊ณ„์ธต๋„๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด Set์€ AbstractSet<E>์„ ์ƒ์†ํ–ˆ๊ณ  . Set์€ subSet( ) ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

TreeSet์—๋งŒ ์กด์žฌํ•˜๋Š” Method

 

What is the purpose of AbstractCollection

AbstractCollection implements Collection. So why is AbstractCollection there and why do we use Collection instead of directly using AbstractCollection?

stackoverflow.com

 

 

 

 

 

 

 

3. ์ •๋ ฌ


๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ ์ •๋ ฌ์ˆœ์„œ๋Š” ๋ฌธ์ž์˜ ์ฝ”๋“œ๊ฐ’์ด ๊ธฐ์ค€์ด ๋˜๋ฏ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์ˆœ์„œ์—์„œ ํฐ ์ˆœ์„œ, ์ฆ‰ ๊ณต๋ฐฑ, ์ˆซ์ž, ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ์˜ ๊ฒฝ์šฐ ๊ทธ ๋ฐ˜๋Œ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

๋ฌธ์ž์˜ ์ฝ”๋“œ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

4. headSet / tailSet


headSet, tailSet์„ ์ด์šฉํ•˜๋ฉด TreeSet์— ์ €์žฅ๋œ ๊ฐ์ฒด ์ค‘ ์ง€์ •๋œ ๊ธฐ์ค€ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’ ๊ฐ์ฒด๋“ค๊ณผ ์ž‘์€ ๊ฐ’ ๊ฐ์ฒด๋“ค์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

๋Œ“๊ธ€