class HashSet:
class Node:
key
constructor Node(key):
this.key = key
buckets // Array of linked lists
bucketSize
size
constructor HashSet():
bucketSize = 4
initialize buckets with empty linked lists of size bucketSize
size = 0
function hashFunction(key):
hashCode = key.hashCode()
return absolute value of (hashCode % bucketSize)
function add(key):
bucketIndex = hashFunction(key)
bucket = buckets[bucketIndex]
for node in bucket:
if node.key == key:
return // Key already exists
add new Node(key) to bucket
size++
if (size / bucketSize) > 2:
rehash()
function contains(key):
bucketIndex = hashFunction(key)
bucket = buckets[bucketIndex]
for node in bucket:
if node.key == key:
return true
return false
function remove(key):
bucketIndex = hashFunction(key)
bucket = buckets[bucketIndex]
targetNode = null
for node in bucket:
if node.key == key:
targetNode = node
break
if targetNode != null:
remove targetNode from bucket
size--
function rehash():
oldBuckets = buckets
bucketSize *= 2
initialize new buckets with empty linked lists of size bucketSize
size = 0
for bucket in oldBuckets:
for node in bucket:
add(node.key)