Search

ν•΄μ‹œμ…‹

HashSet (ν•΄μ‹œμ…‹)

HashSet은 Set μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ μ»¬λ ‰μ…˜μœΌλ‘œ, 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šκ³  μˆœμ„œκ°€ μ—†λŠ” λ°μ΄ν„°μ˜ 집합을 ν‘œν˜„ν•˜λŠ” μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.

핡심 μš”μ†Œ

νŠΉμ§•
μ„€λͺ…
쀑볡 λΆˆκ°€
λ™μΌν•œ μš”μ†Œλ₯Ό μ€‘λ³΅ν•΄μ„œ μ €μž₯ν•  수 μ—†μŒ
μˆœμ„œ μ—†μŒ
μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŒ
null ν—ˆμš©
null 값을 μ €μž₯ν•  수 있음
μ„±λŠ₯
탐색, μ‚½μž…, μ‚­μ œ μ‹œκ°„λ³΅μž‘λ„ O(1)

직접 κ΅¬ν˜„ μ˜ˆμ‹œ μ½”λ“œ

public class MyHashSet<E> { private static final int DEFAULT_CAPACITY = 16; private Node<E>[] table; private int size; @SuppressWarnings("unchecked") public MyHashSet() { table = new Node[DEFAULT_CAPACITY]; size = 0; } private static class Node<E> { E data; Node<E> next; Node(E data) { this.data = data; } } public boolean add(E element) { if (contains(element)) return false; int index = getIndex(element); Node<E> newNode = new Node<>(element); newNode.next = table[index]; table[index] = newNode; size++; return true; } public boolean contains(E element) { int index = getIndex(element); Node<E> current = table[index]; while (current != null) { if (current.data.equals(element)) { return true; } current = current.next; } return false; } private int getIndex(E element) { return Math.abs(element.hashCode() % table.length); } }
Java
볡사

Java Collection Framework μ‚¬μš© μ˜ˆμ‹œ

import java.util.HashSet; import java.util.Set; public class HashSetExample { public static void main(String[] args) { // HashSet 생성 Set<String> fruits = new HashSet<>(); // μš”μ†Œ μΆ”κ°€ fruits.add("사과"); fruits.add("λ°”λ‚˜λ‚˜"); fruits.add("μ˜€λ Œμ§€"); fruits.add("사과"); // 쀑볡 μΆ”κ°€ μ‹œλ„ // κ²°κ³Ό 좜λ ₯ System.out.println("과일 μ„ΈνŠΈ: " + fruits); // μ€‘λ³΅λœ "사과"λŠ” ν•œ 번만 μ €μž₯됨 System.out.println("μ„ΈνŠΈ 크기: " + fruits.size()); // 포함 μ—¬λΆ€ 확인 System.out.println("사과 포함?: " + fruits.contains("사과")); // μš”μ†Œ 제거 fruits.remove("λ°”λ‚˜λ‚˜"); System.out.println("λ°”λ‚˜λ‚˜ 제거 ν›„: " + fruits); // λͺ¨λ“  μš”μ†Œ 제거 fruits.clear(); System.out.println("λΉ„μ–΄μžˆλ‚˜μš”?: " + fruits.isEmpty()); } }
Java
볡사