Deep_Dev
article thumbnail

 

 ๐Ÿ“š TreeSet

 

 

TreeSet 

TreeSet์€ Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋กœ์จ ๊ฐ์ฒด๋ฅผ ์ค‘๋ณตํ•ด์„œ ์ €์žฅํ•  ์ˆ˜ ์—†๊ณ  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” Set์˜ ์„ฑ์งˆ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ถ”๊ฐ€์™€ ์‚ญ์ œ์—๋Š” ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๋” ๊ฑธ๋ฆฌ์ง€๋งŒ, ์ •๋ ฌ๊ณผ ๊ฒ€์ƒ‰์— ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ์— ๊ธฐ๋ณธ์ ์œผ๋กœ Nature Ordering์„ ์ง€์›ํ•˜๋ฉฐ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Comparator ๊ฐ์ฒด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ž„์˜๋กœ ์ง€์ •ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ : ๋ถ€๋ชจ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์™ผ์ชฝ ์ž์‹์œผ๋กœ, ํฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๋Š” ์˜ค๋ฅธ์ชฝ ์ž์‹์œผ๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€๋‚˜ ์‚ญ์ œ ์‹œ ํŠธ๋ฆฌ๊ฐ€ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์ณ์ ธ์žˆ์ง€ ์•Š๋„๋ก ๊ท ํ˜•์„ ๋งž์ถ”์–ด์ค€๋‹ค.

 

 

โœ… TreeSet ์‚ฌ์šฉ๋ฒ• ( ์˜ˆ์ œ )

TreeSet ์„ ์–ธ

TreeSet์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ์ฒด ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ‘œ๊ธฐํ•˜๊ณ  ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค. ์„ ์–ธ์‹œ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์—†๋‹ค. 

import java.util.TreeSet;
import java.util.Arrays;

TreeSet<Integer> ts1 = new TreeSet<Integer>(); // TreeSet ์ƒ์„ฑ
TreeSet<Integer> ts2 = new TreeSet<>(); // new์—์„œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ๋žต ๊ฐ€๋Šฅ
TreeSet<Integer> ts3 = new TreeSet<>(Arrays.asList(1,2,3)); // ์ดˆ๊ธฐ๊ฐ’ ์ง€์ •

 

 

 

โœ… TreeSet ๊ฐ’ ์ถ”๊ฐ€

add(value) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

TreeSet<Integer> ts1 = new TreeSet<>(); // TreeSet ์ƒ์„ฑ

ts1.add(5);
ts1.add(3);
ts1.add(9);
ts1.add(7);

System.out.print(ts1); // ์ถœ๋ ฅ๊ฒฐ๊ณผ : [3, 5, 7, 9]

 

 

โœ… TreeSet ๊ฐ’ ์‚ญ์ œ

๊ฐ’์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” remove(value) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ value๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“  ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด clear() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

TreeSet<Integer> ts1 = new TreeSet<>(); // TreeSet ์ƒ์„ฑ
ts1.add(5);
ts1.add(3);
ts1.add(9);

ts1.remove(3); // 3 ์‚ญ์ œ
System.out.print(ts1); // ์ถœ๋ ฅ ๊ฒฐ๊ณผ : [5, 9]

ts1.clear(); // ์ „์ฒด ์‚ญ์ œ
System.out.print(ts1); // ์ถœ๋ ฅ ๊ฒฐ๊ณผ : []

 

 

โœ… TreeSet ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ

TreeSet<Integer> ts1 = new TreeSet<>(); // TreeSet ์ƒ์„ฑ
ts1.add(5);
ts1.add(3);
ts1.add(9);

System.out.print(ts1.size()); // TreeSet ํฌ๊ธฐ : 3

 

 

โœ… TreeSet ์ถœ๋ ฅ

TreeSet์„ ๊ทธ๋ƒฅ ์ถœ๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์„œ ์ „์ฒด ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค. first()๋ฉ”์†Œ๋“œ๋Š” TreeSet์˜ ์ตœ์†Œ๊ฐ’์„, last()๋ฉ”์†Œ๋“œ๋Š” ์ตœ๋Œ€๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. print ์ด์™ธ์— TreeSet์„ ์ „์ฒด ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํ–ฅ์ƒ๋œ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ˜๋ณตํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ˜๋ณต์ž(Iterator)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Iterator์˜ hasNext() ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ€์ ธ์˜ฌ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด true๋ฅผ, ์—†์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

TreeSet์˜ ์ „์ฒด ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ ์ˆœ์„œ์— ๊ด€๊ณ„ ์—…์‹ฑ ๊ฐ์ฒด๋“ค์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋ผ์„œ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. TreeSet์€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด ๊ธฐ๋ณธ๊ฐ’์ด๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋”ฐ๋กœ ์žˆ๋‹ค.

TreeSet<Integer> ts1 = new TreeSet<>();
ts1.add(5);
ts1.add(3);
ts1.add(9);

System.out.print(ts1); // ์ „์ฒด ์ถœ๋ ฅ : [3, 5, 9];
System.out.print(ts1.first()) // ์ตœ์†Œ๊ฐ’ ์ถœ๋ ฅ : 3
System.out.print(ts1.last()) // ์ตœ๋Œ€๊ฐ’ ์ถœ๋ ฅ : 9

// ํ–ฅ์ƒ๋œ for๋ฌธ ์‚ฌ์šฉ
for(int i : ts1)
	System.out.print(i + " "); // ์ถœ๋ ฅ ๊ฒฐ๊ณผ : 3 5 9
    
Iterator iter = ts1.iterator();
while(iter.hasNext())
	System.out.print(iter.next() + " "); // ์ถœ๋ ฅ ๊ฒฐ๊ณผ : 3 5 9

 

 

โœ… TreeSet ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

Comparator ์‚ฌ์šฉ

TreeSet<Integer> ts1 = new TreeSet<>(Comparator.reverseOrder()); // Comparator ์ž…๋ ฅํ•˜์—ฌ ์ž„์˜๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
ts1.add(5);
ts1.add(3);
ts1.add(9);

Iterator iter = ts1.iterator();
while(iter.hasNext())
	System.out.print(iter.next() + " "); // ์ถœ๋ ฅ ๊ฒฐ๊ณผ : 9 5 3