Deep_Dev
article thumbnail

HashSet

HashSet์ด๋ž€?

Set ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ง€์›ํ•˜๋Š” ๊ตฌํ˜„ ํด๋ž˜์Šค์ด๋‹ค.

์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅ๋˜์ง€ ์•Š๊ณ , ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€๋˜์ง€ ์•Š๋Š”๊ฒŒ ํŠน์ง•์ด๋‹ค.

HashSet์€ null ์š”์†Œ๋„ ํ—ˆ์šฉํ•œ๋‹ค.

 

์ด ํด๋ž˜์Šค์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ

 

์ค‘๋ณต์„ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๊ณผ์ •

HashSet์€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์ „์— ๋จผ์ € ๊ฐ์ฒด์˜ hashCode()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์–ป์–ด๋‚ธ ๋‹ค์Œ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด๋“ค์˜ ํ•ด์‹œ ์ฝ”๋“œ์™€ ๋น„๊ตํ•œ ๋’ค ๊ฐ™์€ ํ•ด์‹œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค์‹œ equals() ๋ฉ”์†Œ๋“œ๋กœ ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•ด์„œ true๊ฐ€ ๋‚˜์˜ค๋ฉด ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ํŒ๋‹จํ•˜๊ณ  ์ค‘๋ณต ์ €์žฅ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด์„ HashSet์— ์ €์žฅํ•  ๊ฒฝ์šฐ, ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๊ฐ–๋Š” String๊ฐ์ฒด๋Š” ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผ๋˜๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ๊ฐ–๋Š” String๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผ๋˜๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” Stringํด๋ž˜์Šค๊ฐ€ hashCode()์™€ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ๊ฐ™์€ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ hashCode()์˜ ๋ฆฌํ„ด ๊ฐ’์„ ๊ฐ™๊ฒŒ, equals()์˜ ๋ฆฌํ„ด ๊ฐ’์€ true๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 


๋ณ€์ˆ˜ ์„ ์–ธ

HashSet์˜ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค

HashSet<๋ฐ์ดํ„ฐํƒ€์ž…> ๋ณ€์ˆ˜๋ช… = new HashSet<๋ฐ์ดํ„ฐํƒ€์ž…>(); ์œผ๋กœ ์„ ์–ธํ•ด์ค€๋‹ค.

HashSet<Integer> : Integerํ˜•์˜ HashMap ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

HashSet<String> : Stringํ˜•์˜ HashMap ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

HashSet<Integer> set = new HashSet<Integer>();		
HashSet<String> set2 = new HashSet<String>();

 


๊ฐ’ ์ถ”๊ฐ€

 

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

์ถ”๊ฐ€๋˜๋Š” ๊ฐ’์€ HashSet<๋ฐ์ดํ„ฐํƒ€์ž…>์˜ ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

public class HashSetTest {
	public static void main(String[] args)  {	
		// Integer
		HashSet<Integer> set = new HashSet<Integer>();	
		
		set.add(1);
		set.add(2);
		set.add(3);
		set.add(1);
				
		// String
		HashSet<String> set2 = new HashSet<String>();

		set2.add("a");
		set2.add("b");
		set2.add("c");
		set2.add("a");
	}
}

 


๊ฐ’ ์‚ญ์ œ

HashSet์˜ remove(value) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ•˜๋Š” value ๊ฐ’๋งŒ ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค.

์ „๋ถ€ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ HashSet์˜ clear() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

public class HashSetTest {
	public static void main(String[] args)  {	
		// Integer
		HashSet<Integer> set = new HashSet<Integer>();	
		set.remove(1);
		set.clear();
				
		// String
		HashSet<String> set2 = new HashSet<String>();
		set2.remove("a");
		set2.clear();
	}
}

 


ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ

HashSet์˜ size() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ˜„์žฌ HashSet์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ์ค‘๋ณต๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋œ๋‹ค.

Size() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ์‹œ ๋‘˜ ๋‹ค ๊ฒฐ๊ณผ๊ฐ€ 3์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

public class HashSetTest {
	public static void main(String[] args)  {	
		// Integer
		HashSet<Integer> set = new HashSet<Integer>();	
		
		set.add(1);
		set.add(2);
		set.add(3);
		set.add(1);
		System.out.println("set์˜ ํฌ๊ธฐ : " + set.size());
				
		// String
		HashSet<String> set2 = new HashSet<String>();

		set2.add("a");
		set2.add("b");
		set2.add("c");
		set2.add("a");
		System.out.println("set2์˜ ํฌ๊ธฐ : " + set2.size());
	}
}

 

๊ฒฐ๊ณผ ํ™”๋ฉด

 


๋ฐ์ดํ„ฐ ์ถœ๋ ฅํ•˜๊ธฐ

HashSet ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ˆœํžˆ println์œผ๋กœ ์ถœ๋ ฅ์„ ํ•˜๋Š” ๊ฒฝ์šฐ [1, 2, 3], [a, b, c] ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ Iterator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

import java.util.HashSet;
import java.util.Iterator;

public class HashSetTest {
	public static void main(String[] args)  {	
		// Integer
		HashSet<Integer> set = new HashSet<Integer>();	
		
		set.add(1);
		set.add(2);
		set.add(3);
		set.add(1);
		System.out.println("set์˜ ๊ฐ’ : " + set);
				
		// String
		HashSet<String> set2 = new HashSet<String>();

		set2.add("a");
		set2.add("b");
		set2.add("c");
		set2.add("a");
		System.out.println("set2์˜ ๊ฐ’ : " + set2);
		
		// Integer ์ถœ๋ ฅ
		Iterator iter = set.iterator();
		while(iter.hasNext()) {
			System.out.print(iter.next() + " ");
		}
		
		System.out.println("");

		// String ์ถœ๋ ฅ
		Iterator iter2 = set2.iterator();
		while(iter2.hasNext()) {
			System.out.print(iter2.next() + " ");
		}
	}
}

๊ฒฐ๊ณผ ํ™”๋ฉด

 


๊ฒ€์ƒ‰ํ•˜๊ธฐ

Hashset ๋‚ด๋ถ€์˜ ์›ํ•˜๋Š” ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ contains(value) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด true, ๊ฐ’์ด ์—†๋‹ค๋ฉด false๋ฅผ return

public class HashSetTest {
	public static void main(String[] args)  {	
		// Integer
		HashSet<Integer> set = new HashSet<Integer>();	
		
		set.add(1);
		set.add(2);
		set.add(3);
		set.add(1);
		
		System.out.println("1์€ ์žˆ๋Š”๊ฐ€? : " + set.contains(1));
				
		// String
		HashSet<String> set2 = new HashSet<String>();

		set2.add("a");
		set2.add("b");
		set2.add("c");
		set2.add("a");
		
		System.out.println("a๋Š” ์žˆ๋Š”๊ฐ€? : " + set2.contains("a"));
	}
}

๊ฒฐ๊ณผ ํ™”๋ฉด