diff --git a/src/main/java/core/basesyntax/StorageImpl.java b/src/main/java/core/basesyntax/StorageImpl.java new file mode 100644 index 000000000..db1b89a8e --- /dev/null +++ b/src/main/java/core/basesyntax/StorageImpl.java @@ -0,0 +1,46 @@ +package core.basesyntax; + +public class StorageImpl implements Storage { + private static final int MAX_SIZE = 10; + private K[] keys; + private V[] values; + private int size; + + @SuppressWarnings("unchecked") + public StorageImpl() { + keys = (K[]) new Object[MAX_SIZE]; + values = (V[]) new Object[MAX_SIZE]; + } + + @Override + public void put(K key, V value) { + for (int i = 0; i < size; i++) { + boolean keysAreEqual = keys[i] == null ? key == null : keys[i].equals(key); + if (keysAreEqual) { + values[i] = value; + return; + } + } + keys[size] = key; + values[size] = value; + size++; + } + + @Override + public V get(K key) { + for (int i = 0; i < size; i++) { + boolean keysAreEqual = keys[i] == null ? key == null : keys[i].equals(key); + if (keysAreEqual) { + return values[i]; + } + } + return null; + } + + @Override + public int size() { + return size; + } +} + + diff --git a/src/main/java/core/basesyntax/impl/StorageImpl.java b/src/main/java/core/basesyntax/impl/StorageImpl.java index 455a7b080..7fa693997 100644 --- a/src/main/java/core/basesyntax/impl/StorageImpl.java +++ b/src/main/java/core/basesyntax/impl/StorageImpl.java @@ -3,17 +3,55 @@ import core.basesyntax.Storage; public class StorageImpl implements Storage { + private static final int MAX_SIZE = 10; + private Entry[] entries; + private int size; + + private static class Entry { + private K key; + private V value; + + Entry(K key, V value) { + this.key = key; + this.value = value; + } + } + + @SuppressWarnings("unchecked") + public StorageImpl() { + entries = new Entry[MAX_SIZE]; + } + @Override public void put(K key, V value) { + for (int i = 0; i < size; i++) { + boolean keysAreEqual = entries[i].key == null + ? key == null + : entries[i].key.equals(key); + if (keysAreEqual) { + entries[i].value = value; + return; + } + } + entries[size] = new Entry<>(key, value); + size++; } @Override public V get(K key) { + for (int i = 0; i < size; i++) { + boolean keysAreEqual = entries[i].key == null + ? key == null + : entries[i].key.equals(key); + if (keysAreEqual) { + return entries[i].value; + } + } return null; } @Override public int size() { - return -1; + return size; } }