diff --git a/datastructures/datastructures.iml b/datastructures/datastructures.iml new file mode 100644 index 0000000..01e8e1b --- /dev/null +++ b/datastructures/datastructures.iml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/datastructures/src/be/brainbaking/datastructures/hashing/DoubleProbeHash.java b/datastructures/src/be/brainbaking/datastructures/hashing/DoubleProbeHash.java new file mode 100644 index 0000000..3b1c6e0 --- /dev/null +++ b/datastructures/src/be/brainbaking/datastructures/hashing/DoubleProbeHash.java @@ -0,0 +1,19 @@ +package be.brainbaking.datastructures.hashing; + +public class DoubleProbeHash implements Hashable { + + private final int max; + + public DoubleProbeHash(int max) { + this.max = max; + } + + private int auxiliarHash(Object key, int probeStep) { + return (1 + key.hashCode()) * (max - 1); + } + + @Override + public int hash(Object key, int probeStep) { + return (auxiliarHash(key, probeStep) + probeStep) % max; + } +} diff --git a/datastructures/src/be/brainbaking/datastructures/hashing/Hashable.java b/datastructures/src/be/brainbaking/datastructures/hashing/Hashable.java new file mode 100644 index 0000000..3d5f150 --- /dev/null +++ b/datastructures/src/be/brainbaking/datastructures/hashing/Hashable.java @@ -0,0 +1,7 @@ +package be.brainbaking.datastructures.hashing; + +public interface Hashable { + + int hash(Object key, int i); + +} diff --git a/datastructures/src/be/brainbaking/datastructures/hashing/LinearProbeHash.java b/datastructures/src/be/brainbaking/datastructures/hashing/LinearProbeHash.java new file mode 100644 index 0000000..8dc35f2 --- /dev/null +++ b/datastructures/src/be/brainbaking/datastructures/hashing/LinearProbeHash.java @@ -0,0 +1,15 @@ +package be.brainbaking.datastructures.hashing; + +public class LinearProbeHash implements Hashable { + + private final int max; + + public LinearProbeHash(int max) { + this.max = max; + } + + @Override + public int hash(Object key, int probeStep) { + return (key.hashCode() + probeStep) % max; + } +} diff --git a/datastructures/src/be/brainbaking/datastructures/hashing/QuadraticProbeHash.java b/datastructures/src/be/brainbaking/datastructures/hashing/QuadraticProbeHash.java new file mode 100644 index 0000000..696bf4b --- /dev/null +++ b/datastructures/src/be/brainbaking/datastructures/hashing/QuadraticProbeHash.java @@ -0,0 +1,15 @@ +package be.brainbaking.datastructures.hashing; + +public class QuadraticProbeHash implements Hashable { + + private final int max; + + public QuadraticProbeHash(int max) { + this.max = max; + } + + @Override + public int hash(Object key, int probeStep) { + return (key.hashCode() + probeStep * probeStep) % max; + } +} diff --git a/datastructures/src/be/brainbaking/datastructures/hashtable/HashBucket.java b/datastructures/src/be/brainbaking/datastructures/hashtable/HashBucket.java new file mode 100644 index 0000000..b959229 --- /dev/null +++ b/datastructures/src/be/brainbaking/datastructures/hashtable/HashBucket.java @@ -0,0 +1,10 @@ +package be.brainbaking.datastructures.hashtable; + +public class HashBucket { + + private final T key; + + public HashBucket(T key) { + this.key = key; + } +} diff --git a/datastructures/src/be/brainbaking/datastructures/hashtable/HashTable.java b/datastructures/src/be/brainbaking/datastructures/hashtable/HashTable.java new file mode 100644 index 0000000..44f5c0a --- /dev/null +++ b/datastructures/src/be/brainbaking/datastructures/hashtable/HashTable.java @@ -0,0 +1,48 @@ +package be.brainbaking.datastructures.hashtable; + +import be.brainbaking.datastructures.hashing.Hashable; +import be.brainbaking.datastructures.hashing.LinearProbeHash; + +public class HashTable { + + private final HashBucket[] table; + private final Hashable hasher; + + public HashTable() { + this(10); + } + + private HashTable(int initialSize) { + table = new HashBucket[10]; + hasher = new LinearProbeHash(10); + } + + public void add(T key) { + add(key, 0); + } + + public void remove(T key) { + throw new UnsupportedOperationException(); + // TODO "deleted" stuff + } + + public int search(T key) { + throw new UnsupportedOperationException(); + // TODO return key if exists + } + + private void add(T key, int probeStep) { + if(probeStep > table.length) { + throw new UnsupportedOperationException("unable to add key to table, everything occupied?"); + } + + int hash = hasher.hash(key, probeStep); + if(table[hash] != null) { + add(key, probeStep + 1); + } else { + table[hash] = new HashBucket<>(key); + } + + } + +} diff --git a/datastructures/test/be/brainbaking/datastructures/hashtable/HashTableTest.java b/datastructures/test/be/brainbaking/datastructures/hashtable/HashTableTest.java new file mode 100644 index 0000000..fd72cbd --- /dev/null +++ b/datastructures/test/be/brainbaking/datastructures/hashtable/HashTableTest.java @@ -0,0 +1,12 @@ +package be.brainbaking.datastructures.hashtable; + +import org.junit.jupiter.api.Test; + +public class HashTableTest { + + @Test + public void add() { + + } + +}