๊ด€๋ฆฌ ๋ฉ”๋‰ด

ejyoo's ๊ฐœ๋ฐœ ๋…ธํŠธ

Set & TreeSet ๋ณธ๋ฌธ

BackEnd/Java

Set & TreeSet

ejyoovV 2021. 3. 5. 13:35

๐Ÿ’ก Set์€ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  ์ˆœ์„œ๊ฐ€ ์—†๋‹ค๋Š” ๋ง์€ ๋ฐ์ดํ„ฐ ์ถ”์ถœ ์‹œ index๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋ƒ ์—†๋ƒ๋กœ ๊ธฐ์ค€์„ ์‚ผ์œผ๋ฉด ๋œ๋‹ค.

  List๋Š” index๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ˆœ์„œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๊ณ 

  Set์€ index๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์—†๊ณ  iterator๋กœ ๋ฝ‘๊ธฐ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ๊ฒƒ์ด๋‹ค.

  Set์€ ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ด๋‹ค.

 

๐Ÿ’ก Set์˜ CRUD

  C : add

  R : Iterator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ฝ์Œ.

  U : remove ํ›„ add

  D : remeve

 

public static void main(String[] args) {
		Set hs1 = new HashSet();
		
//		Set์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋„ add()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
		hs1.add("DD");
		hs1.add("AA");
		hs1.add(2);
		hs1.add("CC");
		hs1.add("BB");
		hs1.add(1);
		hs1.add(3);
		
		System.out.println("Set ๋ฐ์ดํ„ฐ : " + hs1);
		System.out.println();
		
//		Set์€ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์—†๊ณ , ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
//		๊ทธ๋ž˜์„œ ์ด๋ฏธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ add ํ•˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  
//		๋ฐ์ดํ„ฐ๋Š” ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค.
		boolean isAdd = hs1.add("FF");
		System.out.println("์ค‘๋ณต๋˜์ง€ ์•Š์„ ๋•Œ : " + isAdd);
		System.out.println("Set ๋ฐ์ดํ„ฐ : " + hs1);
		System.out.println();
		
//		์ค‘๋ณต์ด๋ฉด ADD ๋˜์ง„ ์•Š์Œ.
		isAdd = hs1.add("CC");
		System.out.println("์ค‘๋ณต๋  ๋•Œ : " + isAdd);
		System.out.println("Set ๋ฐ์ดํ„ฐ : " + hs1);
		System.out.println();
		
		
//		Set ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์ˆ˜์ •ํ•˜๋Š” ๋ช…๋ น์ด ๋”ฐ๋กœ ์—†๊ธฐ ๋•Œ๋ฌธ์—
//		ํ•ด๋‹น ์ž๋ฃŒ๋ฅผ ์‚ญ์ œํ•œ ํ›„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
		
//		์‚ญ์ œํ•˜๋Š” ๋ฉ”์„œ๋“œ
//		1) clear() => Set ๋ฐ์ดํ„ฐ ์ „์ฒด ์‚ญ์ œ
//		2) remove(์‚ญ์ œํ•  ์ž๋ฃŒ) => ํ•ด๋‹น ์ž๋ฃŒ ์‚ญ์ œ
		
//		์˜ˆ) 'FF'๋ฅผ 'EE'๋กœ ์ˆ˜์ •ํ•˜๊ธฐ
		hs1.remove("FF");//FF์ž๋ฃŒ ์‚ญ์ œ
		System.out.println("์‚ญ์ œ ํ›„ Set ๋ฐ์ดํ„ฐ : " + hs1);
		System.out.println();
		
		hs1.add("EE");//EE์ž๋ฃŒ ์ถ”๊ฐ€
		System.out.println("์ถ”๊ฐ€ ํ›„ Set ๋ฐ์ดํ„ฐ : " + hs1);
		System.out.println();
		
//		hs1.clear(); //์ „์ฒด ์ž๋ฃŒ ์‚ญ์ œ
//		System.out.println("Clear ํ›„ Set ๋ฐ์ดํ„ฐ : " + hs1);
		
		System.out.println("Set์˜ ์ž๋ฃŒ ๊ฐœ์ˆ˜ : " + hs1.size());
		System.out.println();
		
//		Set์€ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— List์ฒ˜๋Ÿผ 
//		์ธ๋ฑ์Šค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†๋‹ค.
//		๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” Iterator๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.
//		Set์˜ ๋ฐ์ดํ„ฐ๋ฅผ Iterator๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ => Set์˜ iterator() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
//		Set์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Iterator ๊ฐ์ฒด๋ฅผ ๊ฐ–๊ณ ์žˆ๋‹ค.
		Iterator it = hs1.iterator();
		
//		๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ธฐ
//		hasNext() ๋ฉ”์„œ๋“œ => ํฌ์ธํ„ฐ ๋‹ค์Œ ์œ„์น˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด true, ์—†์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
		while(it.hasNext()) {//๋‹ค์Œ ์ž๋ฃŒ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
//			next()๋ฉ”์„œ๋“œ => ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์Œ ์ž๋ฃŒ ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ณ , ์ด๋™ํ•œ ์œ„์น˜์˜ ์ž๋ฃŒ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
			System.out.println(it.next());
		}
 }

 

๐Ÿ’ก ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ •์ˆ˜ 5๊ฐœ ๋งŒ๋“ค๊ธฐ => HashSet์ด์šฉ

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class T05_SetTest {
	public static void main(String[] args) {
//		1~100์‚ฌ์ด์˜ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ •์ˆ˜ 5๊ฐœ ๋งŒ๋“ค๊ธฐ
//		๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š๋‹ค๋Š”๊ฒƒ์„ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Set์„ ์‚ฌ์šฉํ•จ 
		HashSet<Integer> intRnd = new HashSet<Integer>();
		
//		while๋ฌธ์€ ๊ณ„์† ๋Œ ์ˆ˜ ์žˆ์Œ.(intRnd๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ 5๊ฐœ๊ฐ€ ๋ ๋•Œ๊นŒ์ง€)
//		๋žœ๋คํ•จ์ˆ˜ ๋ฝ‘์„ ๋•Œ ๊ฐ™์€ ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ.
		while(intRnd.size() < 5) {//๋ฐ์ดํ„ฐ๊ฐ€ 5๊ฐœ๊ฐ€ ๋  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
			int num = (int)(Math.random() * 100 + 1);
			intRnd.add(num);
		}
		
		System.out.println("๋งŒ๋“ค์–ด์ง„ ๋‚œ์ˆ˜๋“ค : " + intRnd);
		
//		Collection ์œ ํ˜•์˜ ๊ฐ์ฒด๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
//		๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž์— ๋ณ€๊ฒฝํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
		List<Integer> intRndList = new ArrayList<Integer>(intRnd);
		System.out.println("List ์ž๋ฃŒ ์ถœ๋ ฅ...");
		
//		for(int i = 0 ; i < intRndList.size() ; i++) {
//			System.out.println(intRndList.get(i));
//		}
		for(Integer num : intRndList) {
			System.out.println(num + " ");
		}
}

 

๐Ÿ’ก TreeSet

์‚ฝ์ž…ํ• ๋Œ€ ์ •๋ ฌ์ด ๋ผ์„œ ๋“ค์–ด๊ฐ„๋‹ค.

๊ฒ€์ƒ‰์— ์ตœ์ ํ™” ๋˜์–ด์žˆ์Œ.

import java.util.SortedSet;
import java.util.TreeSet;

public class T06_TreeSetTest {
	public static void main(String[] args) {
//		TreeSet์€ ์ž๋™์ •๋ ฌ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.
//		TreeSet ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด TreeSet ๊ฐ์ฒด ์ƒ์„ฑํ•จ.
		TreeSet<String> ts = new TreeSet<String>();
		
//		์˜์–ด ๋Œ€๋ฌธ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ TreeSet์— ์ €์žฅ
//		TreeSet์€ Add ํ•˜์ž๋งˆ์ž ์ •๋ ฌ์ด๋˜๋ฏ€๋กœ ์ž„์˜๋กœ ๋ฌธ์ž๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์‚ฝ์ž…ํ•จ.
		for(char ch='Z'; ch>='A'; ch--) {
//			์บ๋ฆญํ„ฐ ํƒ€์ž…์„ ๋ฌธ์ž๋กœ ๋ฐ”๊พธ์–ด์ฃผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— valueOf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜•๋ณ€ํ™˜ ํ•ด์•ผํ•œ๋‹ค.
//			๋ž˜ํผํด๋ž˜์Šค์—๋„Œ valueOf๊ฐ€ ์กด์žฌํ•œ๋‹ค.
//			String temp = (String) ch;//์˜ค๋ฅ˜ ๋ฐœ์ƒํ•จ.
//			์Œฉ๋šฑ๋งž์€ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.(์บ์ŠคํŒ…์ด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ)
			String temp = String.valueOf(ch);
//			์บ์ŠคํŒ…์„ ํ•ด์•ผ๋˜๋Š” ๊ฒฝ์šฐ : Object -> String์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
			Object obj = new String("AAA"); //๊ฐ€๋Šฅ
//			์œ„์˜ ๊ฒฝ์šฐ๋Š” String ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์ค€๊ฒƒ ๋ฟ์ด์ง€ String์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
//			obj. ์‹œ ๋‹คํ˜•์„ฑ์œผ๋กœ ์ธํ•ด String์œผ๋กœ ์ค„์—ฌ์กŒ๊ธฐ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋Š” Object ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ์ด๋‹ค.
//			obj. => Object ๋ฉ”์„œ๋“œ๋งŒ ํ‘œ์‹œํ•จ
//			๋”ฐ๋ผ์„œ ์บ์ŠคํŒ…์„ ํ†ตํ•˜์—ฌ String ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.(๋‹ค์šด ์บ์ŠคํŒ…)
//			((String)obj). => Object, String ๋ฉ”์„œ๋“œ ํ‘œ์‹œํ•จ.
//			
			ts.add(temp);
		}
		
		System.out.println("TreeSet ์ž๋ฃŒ : " + ts);
		
//		TreeSet์— ์ €์žฅ๋œ ์ž๋ฃŒ ์ค‘ ํŠน์ •ํ•œ ์ž๋ฃŒ๋ณด๋‹ค ์ž‘์€ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„์„œ SortedSet์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.
//		=> headSet(๊ธฐ์ค€๊ฐ’) : ๊ธฐ๋ณธ์ ์œผ๋กœ '๊ธฐ์ค€๊ฐ’'์€ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
//		=> headSet(๊ธฐ์ค€๊ฐ’, ๋…ผ๋ฆฌ๊ฐ’) : ๋…ผ๋ฆฌ๊ฐ’์ด true์ด๋ฉด '๊ธฐ์ค€๊ฐ’'์„ ํฌํ•จ์‹œํ‚จ๋‹ค.
		SortedSet<String> ss1 = ts.headSet("K");
		System.out.println("K ์ด์ „ ์ž๋ฃŒ : " + ss1);//๊ธฐ์ค€๊ฐ’ ๋ฏธํฌํ•จ
		System.out.println("K ์ด์ „ ์ž๋ฃŒ (๊ธฐ์ค€๊ฐ’ ํฌํ•จ) : " + 
							ts.headSet("K", true));
		
//		'๊ธฐ์ค€๊ฐ’' ๋ณด๋‹ค ํฐ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„ SortedSet์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
//		=> tailSet(๊ธฐ์ค€๊ฐ’) => ๊ธฐ๋ณธ์ ์œผ๋กœ '๊ธฐ์ค€๊ฐ’'์„ ํฌํ•จ์‹œํ‚จ๋‹ค.
//		=> tailSet(๊ธฐ์ค€๊ฐ’, ๋…ผ๋ฆฌ๊ฐ’) => ๋…ผ๋ฆฌ๊ฐ’์ด false์ด๋ฉด '๊ธฐ์ค€๊ฐ’'์„ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
		SortedSet<String> ss2 = ts.tailSet("K");
		System.out.println("K ์ดํ›„ ์ž๋ฃŒ : " + ss2);//๊ธฐ์ค€๊ฐ’ ํฌํ•จ
		System.out.println("K ์ดํ›„ ์ž๋ฃŒ (๊ธฐ์ค€๊ฐ’ ๋ฏธํฌํ•จ) :" + 
							ts.tailSet("K",false));
		
//		subSet : ๋ถ€๋ถ„์ง‘ํ•ฉ / ์ผ์ • ๋ฒ”์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด์˜ค๊ฒ ๋‹ค.
//		subSet(๊ธฐ์ค€๊ฐ’1, ๊ธฐ์ค€๊ฐ’2) => ๊ธฐ์ค€๊ฐ’1 ~ ๊ธฐ์ค€๊ฐ’2 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
//		=> '๊ธฐ์ค€๊ฐ’1' ํฌํ•จ, '๊ธฐ์ค€๊ฐ’2' ๋ฏธํฌํ•จ
//		subSet(๊ธฐ์ค€๊ฐ’1, ๋…ผ๋ฆฌ๊ฐ’1, ๊ธฐ์ค€๊ฐ’2, ๋…ผ๋ฆฌ๊ฐ’2)
//		=> ๊ฐ ๊ธฐ์ค€๊ฐ’์„ ํฌํ•จํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•œ๋‹ค. (๋…ผ๋ฆฌ๊ฐ’์ด true์ด๋ฉด ํฌํ•จ, false๋ฉด ๋ฏธํฌํ•จ)
		System.out.println("K(ํฌํ•จ) ๋ถ€ํ„ฐ N(๋ฏธํฌํ•จ)๊นŒ์ง€ : " + 
							ts.subSet("K", true, "N", false));
		System.out.println("K(ํฌํ•จ) ๋ถ€ํ„ฐ N(๋ฏธํฌํ•จ)๊นŒ์ง€ : " + 
							ts.subSet("K", true, "N", true));
		System.out.println("K(ํฌํ•จ) ๋ถ€ํ„ฐ N(๋ฏธํฌํ•จ)๊นŒ์ง€ : " + 
							ts.subSet("K", false, "N", true));
		System.out.println("K(ํฌํ•จ) ๋ถ€ํ„ฐ N(๋ฏธํฌํ•จ)๊นŒ์ง€ : " + 
							ts.subSet("K", false, "N", false));
	}
}