From 160f1e413ff6262db7f80ca3e57f7eac20feac2e Mon Sep 17 00:00:00 2001 From: Madan H K <109542799+madanhk18@users.noreply.github.com> Date: Thu, 17 Jul 2025 23:26:00 +0530 Subject: [PATCH 1/3] Add HashSet data structure implementation for integers (#6304) --- .../datastructures/hashset/HashSet.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java diff --git a/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java b/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java new file mode 100644 index 000000000000..7966bf47bce1 --- /dev/null +++ b/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java @@ -0,0 +1,63 @@ + +package com.thealgorithms.datastructures.hashset; + +/** + * Example usage: + *
+ * HashSet set = new HashSet();
+ * set.add(5);
+ * set.add(10);
+ * System.out.println(set.contains(5)); // true
+ * set.remove(5);
+ * System.out.println(set.contains(5)); // false
+ * 
+ */ + +import java.util.LinkedList; + +/** + * A simple implementation of a HashSet for integers using separate chaining. + */ +public class HashSet { + private static final int INITIAL_CAPACITY = 16; + private LinkedList[] buckets; + private int size; + + @SuppressWarnings("unchecked") + public HashSet() { + buckets = new LinkedList[INITIAL_CAPACITY]; + for (int i = 0; i < INITIAL_CAPACITY; i++) { + buckets[i] = new LinkedList<>(); + } + size = 0; + } + + private int hash(int key) { + return Math.abs(key) % buckets.length; + } + + public void add(int key) { + int idx = hash(key); + if (!buckets[idx].contains(key)) { + buckets[idx].add(key); + size++; + } + } + + public boolean contains(int key) { + int idx = hash(key); + return buckets[idx].contains(key); + } + + public void remove(int key) { + int idx = hash(key); + if (buckets[idx].remove((Integer) key)) { + size--; + } + } + + public int size() { + return size; + } +} + From 5368db67dac165ddd9ef6ab6c6cf0d847244ff85 Mon Sep 17 00:00:00 2001 From: Madan H K <109542799+madanhk18@users.noreply.github.com> Date: Thu, 17 Jul 2025 23:32:55 +0530 Subject: [PATCH 2/3] Add HashSet data structure implementation for integers (#6304) with all the Prerequisites --- .../java/com/thealgorithms/datastructures/hashset/HashSet.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java b/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java index 7966bf47bce1..1f13a21aec1f 100644 --- a/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java +++ b/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java @@ -17,6 +17,8 @@ /** * A simple implementation of a HashSet for integers using separate chaining. + * + * See: https://en.wikipedia.org/wiki/Hash_table */ public class HashSet { private static final int INITIAL_CAPACITY = 16; From 2f31c7dfb34f8776d5dcf1092d92bd519dc238c9 Mon Sep 17 00:00:00 2001 From: Madan H K <109542799+madanhk18@users.noreply.github.com> Date: Thu, 17 Jul 2025 23:37:59 +0530 Subject: [PATCH 3/3] Fix raw type warning for LinkedList in HashSet implementation --- .../com/thealgorithms/datastructures/hashset/HashSet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java b/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java index 1f13a21aec1f..7e97c7e56678 100644 --- a/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java +++ b/src/main/java/com/thealgorithms/datastructures/hashset/HashSet.java @@ -27,9 +27,9 @@ public class HashSet { @SuppressWarnings("unchecked") public HashSet() { - buckets = new LinkedList[INITIAL_CAPACITY]; + buckets = (LinkedList[]) new LinkedList[INITIAL_CAPACITY]; for (int i = 0; i < INITIAL_CAPACITY; i++) { - buckets[i] = new LinkedList<>(); + buckets[i] = new LinkedList(); } size = 0; }