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() {
+
+ }
+
+}