[Java] SortedSet์ ๋ํด์.
Set ์ธํฐํ์ด์ค๋ฅผย ์์๋ฐ๋ ์ธํฐํ์ด์ค์ธ SortedSet ์ ๋ํด์ ์์๋ณด์. Set์ ๋ถ๊ฐ์ ์ผ๋ก(์ค๋ณต์ ๊ฑฐ์ธ์) elementย ์ ๋ํ ์ ์ฒด ordering์ ์ ๊ณตํ๊ณ ์๋ค. elementย ๋ค์ย natural ordering์ ์ํด์ ์์๊ฐ ๋งค๊ฒจ์ง๊ฑฐ๋ ๋๋ SortedSet์ ์์ฑ์ ์ ๊ณต๋ Comparator ์ ์ํด์ ์์๊ฐ ๋งค๊ฒจ์ง๋ค.ย
SortedSet์ comparator ๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ค.ย ์ด SortedSet์ Iterator ๋ ascending element order๋ก ๋ณด์ฌ์ค๋ค.ย ๋ช๋ช ์ถ๊ฐ์ ์ธ ํจ์๋ค์ ordering์ ์ด์ ์ ์ ๊ณตํ๋ค.ย
SortedSet์ ์ฝ์ ๋ ๋ชจ๋ ์๋ฆฌ๋จผํธ๋ค์ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ฉฐ,ย (ํน์ ํน์ comparator๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ๊ฑฐ๋)๋ชจ๋ ์๋ฆฌ๋จผํธ๋ค์ ์ํธ๊ฐ์ ๋น๊ต๊ฐ๋ฅํด์ผ ํ๋ค.
๊ทธ๊ฒ ์๋๋ค๋ฉด, ClassCastException ์ด ๋ฐ์๋๋ค. ๋ค์์ ์ฝ๋๋ฅผ ๋ณด์.ย
Exception in thread โmainโ java.lang.ClassCastException: com.konantech.test.TestData cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at com.konantech.test.test.main(test.java:129)
์ ์ด๋ฐ ์์ธ๊ฐ ๋ฐ์ํ ๊น?
๋น๊ต๋ฅผ ํ๋ ค๋ฉด Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ฌ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ด ์๋ค๋ฉด SortedSet ์์๋ ์ด๋ป๊ฒ ๋น๊ตํ ์ง๋ฅผ ๋ชจ๋ฅด๋ ๊ฒ์ด๋ค. ์ฆ, ย ์ฐ๋ฆฌ๋ ๋น๊ตํ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์ด์ผ ํ๋ค.ย
๋น๊ตํ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋๋ก ํ์. Comparable ์ธํฐํ์ด์ค๋ฅผ ๋ด๊ฐ ๋ง๋ TestData ๋ผ๋ ํด๋์ค์ย implements ํ๋ ค๋ฉด compareTo ํจ์๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ด size()๋ฅผ ๋น๊ตํ๋ compareTo() ํจ์๋ฅผ ๊ตฌํํด ๋ณด์๋ค.
๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ ํ ์คํธํด๋ณด์. ๋ค์ด๊ฐ ์์๋ ์ ๊ฐ๊ฐ์ด์ง๋ง, iterator๋ฅผ ํตํด์ ๋์จ ๊ฐ์ ๋ณด๋ฉดย ๋ค์๊ณผ ๊ฐ๋ค. ascending ๋์ด์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ์ค ๊ฐ์ธ์ ์ผ๋ก Iterator๋ฅผ ์ ํธํ์ง๋ ์๋ ํธ์ด๋ผ์ List๋ฅผ SortedSet์ฒ๋ผ ์ฐ๋ ค๋ฉด List ์์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ ์ํ์์Comparator๋ก List์์ ๊ฐ์ฒด์ ํน์ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ๋ง์ด ์ฌ์ฉํ๊ณค ํ๋ค. ์ ์๊ฐํด ๋ณด๋ฉด ์ฐจ์ด์ ์ ์ ๋ ฌ์ ํด์ค๋ค๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ ์์ ์ ์ ๋ ฌ์ ํ๋๋๋ผ๊ณ ์๊ฐ์ด ๋๋ค.ย
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๊ณผ์ ์์ ์ค์๊ฐ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ค๊ณ ํ๋ค๋ฉด SortedSet์ ์ฐ๋ ๊ฒ์ด ํธํ ๊ฒ์ด๋ผ๊ณ ย ์๊ฐ๋๋ค. ์๋ํ๋ฉด List๋ฅผ ์ฐ๋ฉด Comparator๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ ๊ณ์ ๋ด๊ณ ์๋ ๊ณผ์ ์์ ๊ทธ๋ฌ๊ธฐ์ ๋ถ๋ด์ด๊ธฐ ๋๋ฌธ์ด๋ค.ย
๋ ๋ค๋ฅด๊ฒ ์๊ฐํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ค ๋ด๊ฒจ์ง ํ์, List์ ๋ค์ด๊ฐ ๊ฐ์ฒด๋ด ์ด๋ค ๋ณ์, size, age ๋ฑ์ ๋์์ผ๋ก ์์ฃผ sorting์ ํด์ ๋ญ๊ฐ๋ฅผ ์ฐพ์๋ด๋ ์์ ์ ํด์ผ ํ๋ค๋ฉด List-Comparator ์กฐํฉ์ดย ๋์๊ฒ ๊ฐ๋ค๋ย ์๊ฐ์ด ๋ ๋ค.
์ด ๋ถ๋ถ์ ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ง๋ค ๋ค๋ฅผ ์ ์๋ค๊ณ ์๊ฐ๋์ด ์ง๋ค.
compareTo() == equals() ๋ฅผ ํ๋ผ.
๋ฌด์จ ์ ๊ธฐ๋ ํ๋ฉด equals() ํจ์๋ฅผ ํตํด์๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ ์ ์๊ณ , compareTo()๋ฅผ ํตํด์๋ ๋น๊ตํ ์ ์๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ปค์คํ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ SortedSet ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค์ ๊ฐ์ฒด์ ๋ฃ์๋๋ ํด๋น ๊ตฌํ ํด๋์ค๊ฐ ๋น๊ต/์ ๋ ฌ์ ์ด๋ค ํจ์๋ฅผ ๋์์ผ๋ก ํ ์ง๋ ๊ทธ ๊ตฌํ ํด๋์ค์ ๋ฌ๋ ค์๋ ๊ฒ์ด๋ค. ์ฆ, equals() ์ compareTo() ๋ฉ์๋์ ๊ตฌํ ๋ฐ ๋์๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๋ค๋ฉด ๋ช๋ช Collection ์์๋ ๋ค๋ฅด๊ฒ ์ ๋ ฌ๋๊ฑฐ๋ ํ ์ฌ์ง๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
SortedSet ์ธํฐํ์ด์ค ๊ตฌํ์ฒด ํด๋์ค์์ ์ ๊ณตํด์ผ ํ๋ 4๊ฐ์ง ์์ฑ์
๋ชจ๋ ์ผ๋ฐ์ ์ธ ๋ชฉ์ ์ SortedSet ๊ตฌํ ํด๋์ค๋ค์ 4๊ฐ๊ฐ์ง ํ์ค(standard) ์์ฑ์๋ค์ ์ ๊ณตํด์ผ ํ๋ค.
์์ฑ์ ํํ | ์ค๋ช |
ย void (no arg) ์์ฑ์ | ย ๋น sortedSet ์ ์์ฑ.ย natural ordering์ ๋ฐ๋ผ์ ์ ๋ ฌ๋ ์๋ฆฌ๋จผํธ |
ย Comparator ๋ฅผ ์ธ์๋ก ๋ฐ๋ ์์ฑ์ | ย ๋น ์์ฑ์๋ฅผ ๋ง๋๋๋ฐ ์ธ์๋ก ๋ฐ์ Comparator ์ ์ฉ |
ย Collection์ ์ธ์๋ก ๋ฐ๋ ์์ฑ์ | ย ์๋ก์ด SortedSet์ ์์ฑ.ย ย Collection์ natural ordering์ ํด์ SortedSet์ ๋ง๋ ๋ค.ย |
ย SortedSet์ ์ธ์๋ก ๋ฐ๋ ์์ฑ์ | ย ์๋ก์ดย ย SortedSet์ ์์ฑ. ย ์ธ์๋ก ๋ฐ์ SortedSet๊ณผ ๊ฐ์ ordering์ผ๋ก ์ ๋ ฌ๋๋ค.ย |
SortedSet ํจ์๋ค | ์ค๋ช |
ย first()ย | ย ๊ฐ์ฅ ์ ์๋ฆฌ๋จผํธ, ์ญ์ ์๋จ |
ย last()ย | ย ๊ฐ์ฅ ๋ค ์๋ฆฌ๋จผํธ, ์ญ์ ์๋จ. |
ย headSet(toElement) | ย ํน์ ์๋ฆฌ๋จผํธ ๋ณด๋ค ์์ ์๋ฆฌ๋จผํธ๋ค , ํน์ ์๋ฆฌ๋จผํธ ๋ถํฌํจ |
ย tailSet(fromElement) | ย ํน์ ์๋ฆฌ๋จผํธ ๋ณด๋ค ํฐ ์๋ฆฌ๋จผํธ ๋ค , ํน์ ์๋ฆฌ๋จผํธ ํฌํจ,ย |
์์ ๋ก headSet(), tailSet()์ ์์๋ณด์.
ํ์ง๋ง, +โ\0โณ๋ฅผ ํ๋ฉด ์ฑ์ง์ด ๋ฐ๋๋ค. inclusive <=> exclusive
์ด๋ ๊ฒ ์ ๋ฆฌํ๋ฉด ๋๋ค.fromElement๋ ํฌํจ,ย toElement๋ ๋ฌด์กฐ๊ฑด ๋ถํฌํจ์ด ๊ธฐ๋ณธ์ด๋ผ๊ณ ์๊ฐํ๊ณ โ\0โณ์ด ๋ถ๊ฒ ๋๋ฉด ์ฑ์ง์ด ๋ณํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ ๋ง ํน์ดํ ๋ฐฉ์์ด ์๋์๊ฐ ์๋ค.