Notice
Recent Posts
Link
Today
Total
10-06 02:35
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[JAVA ] Set Interface ๋ณธ๋ฌธ

๐ŸฐJAVA/Basic

[JAVA ] Set Interface

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 6. 28. 14:08

SET INTERFACE

    •  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์œผ๋กœ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

        ex) HashSet, LinkedHashSet( Hash Set์˜ ํ•˜์œ„ ํด๋ž˜์Šค ), TreeSet

 

https://coding-factory.tistory.com/554

1. HashSet

  Hash๊ธฐ๋Šฅ๊ณผ Set ์ปฌ๋ ‰์…˜์ด ํ•ฉ์ณ์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

•  Hash Algorithm ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ํŠน์ •์‹œ์ผœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Set ์ปฌ๋ ‰์…˜์˜ ํด๋ž˜์Šค๋กœ  ์ž…๋ ฅ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์ €์žฅ๋˜์–ด ์ •๋ ฌํ•ด์ฃผ์ง€ ์•Š๊ณ  ์ค‘๋ณต๋œ ๊ฐ’์€ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  ๋งŒ์•ฝ ์š”์†Œ์˜ ์ €์žฅ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด LinkedHashSet ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 Null ์š”์†Œ๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

Hash Algorithm

: ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ๊ทธ๊ฒƒ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

: JAVA์—์„œ ํ•ด์‹œ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด Array์™€ LinkedList๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

: ์ €์žฅํ•  ๋ฐ์ดํ„ฐ์˜ ํ‚ค ๊ฐ’์„ ํ•ด์‹œํ•จ์ˆ˜์— ๋„ฃ์–ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์œผ๋กœ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•œ ํ›„ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์ €์žฅ๋œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

 

Hash Algorithm - TCP SCHOOL.com

HashSet ์ค‘๋ณต์š”์†Œ ํŒŒ์•… ๊ณผ์ • 

 

1. hashCode() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ˜ํ™˜๋œ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

2. ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์˜ ์š”์†Œ๋“ค์„ equals() ๋ฉ”์†Œ๋“œ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์ผ True๊ฐ€ ๋‚˜์˜ค๋ฉด ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ํŒ๋‹จํ•˜๊ณ  ์ค‘๋ณต์ €์žฅ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

String ๊ฐ์ฒด๋ฅผ HashSet์— ์ €์žฅํ•  ๊ฒฝ์šฐ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผ๋˜๊ณ , ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ๊ฐ–์€ String ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

 

HashSet Implementation

import java.util.*;

class GFG {
	public static void main(String[] args)
	{
		// Creating an empty HashSet
		HashSet<String> h = new HashSet<String>();

		// Adding elements into HashSet
		h.add("India");
		h.add("Australia");
		h.add("South Africa");

		// Adding duplicate elements
		h.add("India");

		// Displaying the HashSet
		System.out.println(h);
		System.out.println("List contains India or not:"
						+ h.contains("India"));

		// Removing items from HashSet
		// using remove() method
		h.remove("Australia");
		System.out.println("List after removing Australia:" + h);

		// Display message
		System.out.println("Iterating over list:");

		// Iterating over hashSet items
		Iterator<String> i = h.iterator();

		// Holds true till there is single element remaining
		while (i.hasNext())
			// Iterating over elements
			// using next() method
			System.out.println(i.next());
	}
}

Output

[South Africa, Australia, India]
List contains India or not:true
List after removing Australia:[South Africa, India]
Iterating over list:
South Africa
India

2. LinkedHashSet

  HashSet๊ณผ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€์ง€๋งŒ LinkedHashSet์€ ์‚ฝ์ž…๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ( ์ˆœ์„œ ๋ณด์žฅ )

    -  HashSet์˜ ์ •๋ ฌ๋œ ๋ฒ„์ „ 

 HashSet๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ค‘๋ณต ๊ฐ’์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. TreeSet

  SortedSet Interface ๋ฅผ ๊ตฌํ˜„ํ•œ TreeSet์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐ€์ค‘์น˜์— ๋”ฐ๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋จ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. 

  ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. 

  HashSet๋ณด๋‹ค ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๋Š” ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ์ง€๋งŒ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์—๋Š” ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 

  ์ •๋ ฌ๋œ ํ˜•ํƒœ๋กœ ์žˆ๋‹ค๋ณด๋‹ˆ ํŠน์ • ๊ตฌ๊ฐ„์˜ ์ง‘ํ•ฉ์š”์†Œ๋“ค์„ ํƒ์ƒ‰ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  ์ค‘๋ณต๋˜์ง€ ์•Š์œผ๋ฉด์„œ ํŠน์ • ๊ทœ์น™์— ์˜ํ•ด ์ •๋ ฌ๋œ ํ˜•ํƒœ์˜ ์ง‘ํ•ฉ์„ ์“ฐ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

TreeSet ๋‚ด๋ถ€ ๋กœ์ง

TreeSet์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Red-Black Tree์™€ ๊ฐ™์€ ์ž์ฒด ๊ท ํ˜• ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 

์ •๋ ฌ๋œ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. 

 

Red-Black Tree

 

Red-Black Tree

: ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋กœ์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ ์—ฐ๊ด€ ๋ฐฐ์—ด ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

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

: ๋ชจ๋“  ์ž‘์—…์— ๋Œ€ํ•ด ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ํ•ญ์ƒ O(log(N))์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€, ์ œ๊ฑฐ ๋ฐ ๊ฒ€์ƒ‰๊ณผ ๊ฐ™์€ ์ž‘์—…์—๋Š” O(log(N)) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

: ๋”ฐ๋ผ์„œ ์ •๋ ฌ๋œ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

ํ•™์Šต์— ๋งŽ์€ ๋„์›€์ด ๋œ ๋งํฌ๋ฅผ  ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

 

์ฐธ์กฐ ๋ฐ ์ถœ์ฒ˜

HashSet in Java

Set ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค

์ž๋ฐ”[JAVA] - Set Interface( ์…‹ ์ธํ„ฐํŽ˜์ด์Šค )

[Java] ์ž๋ฐ” TreeSet ์‚ฌ์šฉ๋ฒ• & ์˜ˆ์ œ ์ด์ •๋ฆฌ

'๐ŸฐJAVA > Basic' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ JAVA ] Reflection  (0) 2022.07.24
[ JAVA ] Garbage Collection  (0) 2022.07.01
[JAVA ] List Interface  (0) 2022.06.20
[JAVA ] Collection  (0) 2022.06.20
[ JAVA ] Optional  (0) 2022.06.15
Comments