Hash set is similar to hash table(hash map). So if you missed the blog on hash maps, click the link here to view it.
In this blog, I'll be assuming that you already have knowledge of hash tables, so I won't go into specifics for each function.
Hash set is similar hash map, the only difference is that keys don't correspond to any value. Accessing, adding, and removing keys are O(1) in time and space.
import java.util.*;
class HashSet{
  class Entry {
    Integer key;
    Entry(Integer key) {
      this.key = key;
    }
  }
  private LinkedList<Entry>[] set = new LinkedList[10];
  private int hash(Integer key) {}
  private Entry getEntry(Integer key, LinkedList<Entry> entries) {}
  void add(Integer key) {}
  void remove(Integer key) {}
  boolean has(Integer key) {}
}
The methods we will look at are:
hash method is used to get the hash of the key.getEntry method is used to the get the entry in the linked list in the indexadd method is used to add a key into our setremove method is used to remove a key in our sethas method is used to check if the key exist in our setLike always, before starting with our main functions, lets look at the helper functions.
  // Time: O(1), Space: O(1)
  private int hash(Integer key) {
    // I didn't use hashCode here method cuz we already
    // know the user will be inserting an integer
    return key % set.length;
  }
  /*
   * Time: O(n) n-> elements in the list, with good hashing function O(1)
   * Space:(1)
   */
  private Entry getEntry(Integer key, LinkedList<Entry> entries) {
    for (Entry entry : entries) {
      if (entry.key.equals(key))
        return entry;
    }
    return null;
  }
Now lets look at main methods:
  /*
   * Time: O(n) n-> elements in the list, with good hashing function O(1)
   * Space:(1)
   */
  void add(Integer key) {
    int hash = hash(key);
    LinkedList<Entry> entries = set[hash];
    if (entries == null) {
      entries = new LinkedList<Entry>();
      set[hash] = entries;
    }
    Entry entry = getEntry(key, entries);
    // we don't get null if the entry exist
    if (entry != null)
      return;
    entries.add(new Entry(key));
  }
  /*
   * Time: O(n) n-> elements in the list, with good hashing function O(1)
   * Space:(1)
   */
  void remove(Integer key) {
    int hash = hash(key);
    LinkedList<Entry> entries = set[hash];
    if (entries == null)
      return;
    Entry entry = getEntry(key, entries);
    if (entry == null)
      return;
    entries.remove(entry);
  }
  /*
   * Time: O(n) n-> elements in the list, with good hashing function O(1)
   * Space:(1)
   */
  boolean has(Integer key) {
    int hash = hash(key);
    LinkedList<Entry> entries = set[hash];
    if (entries == null)
      return false;
    Entry entry = getEntry(key, entries);
    if (entry == null)
      return false;
    return true;
  }
This Project is Open sourced!!, visit our github to contribute