diff --git a/SimpleArrayMap/.classpath b/SimpleArrayMap/.classpath
new file mode 100644
index 0000000..be55723
--- /dev/null
+++ b/SimpleArrayMap/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SimpleArrayMap/.project b/SimpleArrayMap/.project
new file mode 100644
index 0000000..9d3da61
--- /dev/null
+++ b/SimpleArrayMap/.project
@@ -0,0 +1,17 @@
+
+
+ SimpleArrayMap
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/SimpleArrayMap/src/solution/SimpleArrayMap.java b/SimpleArrayMap/src/solution/SimpleArrayMap.java
new file mode 100644
index 0000000..902d7fe
--- /dev/null
+++ b/SimpleArrayMap/src/solution/SimpleArrayMap.java
@@ -0,0 +1,107 @@
+package solution;
+
+import java.util.function.Consumer;
+
+import testat.ISimpleMap;
+
+public class SimpleArrayMap implements ISimpleMap {
+
+ private int size;
+ private K[] keys;
+ private V[] values;
+
+ public SimpleArrayMap(int maxSize) {
+ size = 0;
+ keys = (K[]) new Object[maxSize];
+ values = (V[]) new Object[maxSize];
+ }
+
+ @Override
+ public V put(K k, V v) {
+
+ if (k == null || v == null) {
+ return null;
+ }
+ for (int i = 0; i < values.length; i++) {
+ if (k.equals(keys[i])) { // found
+ V result = values[i];
+ values[i] = v;
+ return result;
+ }
+ }
+ for (int i = 0; i < values.length; i++) {
+ if (keys[i] == null) { // empty
+ keys[i] = k;
+ values[i] = v;
+ size++;
+ return null;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public V get(K k) {
+ if (k == null) {
+ return null;
+ }
+ for (int i = 0; i < values.length; i++) {
+ if (k.equals(keys[i])) { // found
+ return values[i];
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public V remove(K k) {
+ if (k == null) {
+ return null;
+ }
+ for (int i = 0; i < values.length; i++) {
+ if (k.equals(keys[i])) { // found
+ V v = values[i];
+ size--;
+ keys[i] = null;
+ values[i] = null;
+ return v;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean contains(V v) {
+ if (v == null) {
+ return false;
+ }
+ int counter = 0;
+ for (int i = 0; i < values.length; i++) {
+ if (v.equals(values[i])) {
+ return true;
+ }
+ if (values[i] != null) {
+ counter++;
+ }
+ if (counter == size) {
+ return false;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void forEach(Consumer super V> consumer) {
+ for (int i = 0; i < values.length; i++) {
+ if (keys[i] != null) { // found
+ consumer.accept(values[i]);
+ }
+ }
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+}
diff --git a/SimpleArrayMap/src/solution/SimpleArrayMapTest.java b/SimpleArrayMap/src/solution/SimpleArrayMapTest.java
new file mode 100644
index 0000000..8cea516
--- /dev/null
+++ b/SimpleArrayMap/src/solution/SimpleArrayMapTest.java
@@ -0,0 +1,13 @@
+package solution;
+
+import testat.ASimpleMapTest;
+import testat.ISimpleMap;
+
+public class SimpleArrayMapTest extends ASimpleMapTest {
+
+ @Override
+ protected ISimpleMap getInstance() {
+ return new SimpleArrayMap<>(5);
+ }
+
+}
diff --git a/SimpleArrayMap/src/testat/ASimpleMapTest.java b/SimpleArrayMap/src/testat/ASimpleMapTest.java
new file mode 100644
index 0000000..f22d71d
--- /dev/null
+++ b/SimpleArrayMap/src/testat/ASimpleMapTest.java
@@ -0,0 +1,242 @@
+package testat;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.function.Consumer;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public abstract class ASimpleMapTest {
+
+ ISimpleMap map;
+
+ protected abstract ISimpleMap getInstance();
+
+ private int counter = 0;
+ private String result;
+
+ Consumer action = s -> {
+ counter++;
+ result = result + s;
+ };
+
+ @BeforeAll
+ static void setUpBeforeClass() throws Exception {
+ }
+
+ @BeforeEach
+ void setUp() throws Exception {
+ map = getInstance();
+ }
+
+ @Test
+ void testadd1() {
+ String actual = map.put("1", "Hallo");
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testadd2a() {
+ String actual = map.put(null, "xxx");
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testadd2b() {
+ String actual = map.put("1", null);
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testadd3() {
+ add3();
+ String actual = map.put("1", "Hallo");
+ assertEquals("Eins", actual);
+ }
+
+ @Test
+ void testadd4() {
+ add3();
+ map.put("4", "Vier");
+ map.put("5", "Fünf");
+ map.remove("3");
+ map.put("6", "Sechs");
+
+ String actual = map.get("1");
+ assertEquals("Eins", actual);
+ actual = map.get("2");
+ assertEquals("Zwei", actual);
+ actual = map.get("4");
+ assertEquals("Vier", actual);
+ actual = map.get("5");
+ assertEquals("Fünf", actual);
+ actual = map.get("6");
+ assertEquals("Sechs", actual);
+ }
+
+ @Test
+ void testget1() {
+ String actual = map.get(null);
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testget2() {
+ String actual = map.get("1");
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testget3() {
+ add3();
+ String actual = map.get("1");
+ assertEquals("Eins", actual);
+ actual = map.get("2");
+ assertEquals("Zwei", actual);
+ actual = map.get("3");
+ assertEquals("Drei", actual);
+ }
+
+ @Test
+ void testremove1() {
+ String actual = map.remove(null);
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testremove2() {
+ String actual = map.remove("1");
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testremove3() {
+ add3();
+ String actual = map.remove(null);
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testremove4() {
+ add3();
+ String actual = map.remove("9");
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testremove5() {
+ add3();
+ String actual = map.remove("1");
+ assertEquals("Eins", actual);
+ actual = map.get("1");
+ assertEquals(null, actual);
+ actual = map.remove("2");
+ assertEquals("Zwei", actual);
+ actual = map.get("2");
+ assertEquals(null, actual);
+ actual = map.remove("3");
+ assertEquals("Drei", actual);
+ actual = map.get("3");
+ assertEquals(null, actual);
+ }
+
+ @Test
+ void testcontains1() {
+ Boolean actual = map.contains(null);
+ assertEquals(false, actual);
+ }
+
+ @Test
+ void testcontains2() {
+ Boolean actual = map.contains("1");
+ assertEquals(false, actual);
+ }
+
+ @Test
+ void testcontains3() {
+ add3();
+ Boolean actual = map.contains("Eins");
+ assertEquals(true, actual);
+ actual = map.contains("Zwei");
+ assertEquals(true, actual);
+ actual = map.contains("Drei");
+ assertEquals(true, actual);
+ actual = map.contains("xxx");
+ assertEquals(false, actual);
+ }
+
+ @Test
+ void testsize1() {
+ int actual = map.size();
+ assertEquals(0, actual);
+ }
+
+ @Test
+ void testsize2() {
+ add3();
+ int actual = map.size();
+ assertEquals(3, actual);
+ }
+
+ @Test
+ void testAddSize1() {
+ add3();
+ add3();
+ int actual = map.size();
+ assertEquals(3, actual);
+ }
+
+ @Test
+ void testRemoveSize1() {
+ add3();
+ map.remove("2");
+ int actual = map.size();
+ assertEquals(2, actual);
+ }
+
+ @Test
+ void testRemoveContains1() {
+ add3();
+ map.remove("2");
+ Boolean actual = map.contains("Eins");
+ assertEquals(true, actual);
+ actual = map.contains("Zwei");
+ assertEquals(false, actual);
+ actual = map.contains("Drei");
+ assertEquals(true, actual);
+ actual = map.contains("xxx");
+ assertEquals(false, actual);
+ }
+
+ @Test
+ void testForAll1() {
+ map.forEach(null);
+ assertEquals(true, true);
+ }
+
+ @Test
+ void testForAll2() {
+ map.forEach(action);
+ assertEquals(true, true);
+ }
+
+ @Test
+ void testForAll3() {
+ add3();
+ counter = 0;
+ result = new String("");
+ map.forEach(action);
+ assertEquals(3, counter);
+ assertEquals(true, result.contains("Eins"));
+ assertEquals(true, result.contains("Zwei"));
+ assertEquals(true, result.contains("Drei"));
+ }
+
+ protected void add3() {
+ map.put("1", "Eins");
+ map.put("2", "Zwei");
+ map.put("3", "Drei");
+ }
+}
diff --git a/SimpleArrayMap/src/testat/ISimpleMap.java b/SimpleArrayMap/src/testat/ISimpleMap.java
new file mode 100644
index 0000000..cb039dc
--- /dev/null
+++ b/SimpleArrayMap/src/testat/ISimpleMap.java
@@ -0,0 +1,33 @@
+package testat;
+
+import java.util.function.Consumer;
+
+public interface ISimpleMap {
+
+ // speichert zu den Schlüssel k den Wert v, sofern beide nicht null sind (in
+ // diesem Fall wird null zurück gegeben) .
+ // Falls zu k bereits ein Wert w vorhanden ist, wird dieser durch v ersetzt. Der
+ // alte
+ // Wert w wird zurückgegebn. Falls zu k noch kein Wert gespeichert war, wird
+ // null zurückgegeben
+ V put(K k, V v);
+
+ // Liefert den zum Schlüssel k gespeicherten Wert. Liefert null, falls k ==
+ // null oder falls zu k kein Wert gespeichert war
+ V get(K k);
+
+ // Entfernt den zum Schlüssel k gespeicherten Wert v und liefert v zurück.
+ // Liefert null, falls k ==
+ // null oder falls zu k kein Wert gespeichert war
+ V remove(K k);
+
+ // Liefert true, falls der Wert v in der Map gespeichert ist
+ boolean contains(V v);
+
+ // wendet die Methode consumer.accept(v) auf alle in der Map gespeicherten Werte
+ // an
+ void forEach(Consumer super V> consumer);
+
+ int size(); // Anzahl an in der Map gespeicherten Werte
+
+}