From b1be3702170044bd888e5fccf52f19eeb0ca6863 Mon Sep 17 00:00:00 2001 From: Danyil Date: Wed, 6 May 2026 20:53:30 +0200 Subject: [PATCH 1/3] `Add Storage key-value generic implementation` --- .../core/basesyntax/impl/StorageImpl.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/core/basesyntax/impl/StorageImpl.java b/src/main/java/core/basesyntax/impl/StorageImpl.java index 455a7b080..8b0d890ea 100644 --- a/src/main/java/core/basesyntax/impl/StorageImpl.java +++ b/src/main/java/core/basesyntax/impl/StorageImpl.java @@ -3,17 +3,43 @@ import core.basesyntax.Storage; public class StorageImpl implements Storage { + private static final int MAX_SIZE = 10; + private final Object[] keys; + private final Object[] values; + private int size; + + public StorageImpl() { + keys = new Object[MAX_SIZE]; + values = new Object[MAX_SIZE]; + size = 0; + } + @Override public void put(K key, V value) { + for (int i = 0; i < size; i++) { + if (key == keys[i] || key != null && key.equals(keys[i])) { + values[i] = value; + return; + } + } + keys[size] = key; + values[size] = value; + size++; } @Override + @SuppressWarnings("unchecked") public V get(K key) { + for (int i = 0; i < size; i++) { + if (key == keys[i] || key != null && key.equals(keys[i])) { + return (V) values[i]; + } + } return null; } @Override public int size() { - return -1; + return size; } } From 63482030712839aae8dc4c3db9a61439471fa878 Mon Sep 17 00:00:00 2001 From: Danyil Date: Wed, 6 May 2026 20:57:41 +0200 Subject: [PATCH 2/3] Refactor duplicated key comparison into findKeyIndex method --- .../core/basesyntax/impl/StorageImpl.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/core/basesyntax/impl/StorageImpl.java b/src/main/java/core/basesyntax/impl/StorageImpl.java index 8b0d890ea..a2d8d0bde 100644 --- a/src/main/java/core/basesyntax/impl/StorageImpl.java +++ b/src/main/java/core/basesyntax/impl/StorageImpl.java @@ -16,11 +16,10 @@ public StorageImpl() { @Override public void put(K key, V value) { - for (int i = 0; i < size; i++) { - if (key == keys[i] || key != null && key.equals(keys[i])) { - values[i] = value; - return; - } + int index = findKeyIndex(key); + if (index != -1) { + values[index] = value; + return; } keys[size] = key; values[size] = value; @@ -30,10 +29,9 @@ public void put(K key, V value) { @Override @SuppressWarnings("unchecked") public V get(K key) { - for (int i = 0; i < size; i++) { - if (key == keys[i] || key != null && key.equals(keys[i])) { - return (V) values[i]; - } + int index = findKeyIndex(key); + if (index != -1) { + return (V) values[index]; } return null; } @@ -42,4 +40,13 @@ public V get(K key) { public int size() { return size; } -} + + private int findKeyIndex(K key) { + for (int i = 0; i < size; i++) { + if (key == keys[i] || key != null && key.equals(keys[i])) { + return i; + } + } + return -1; + } +} \ No newline at end of file From 195739edd80a502e3a7b2860f650d3c7dfb58db4 Mon Sep 17 00:00:00 2001 From: Danyil Date: Wed, 6 May 2026 20:58:56 +0200 Subject: [PATCH 3/3] adding new line --- src/main/java/core/basesyntax/impl/StorageImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/core/basesyntax/impl/StorageImpl.java b/src/main/java/core/basesyntax/impl/StorageImpl.java index a2d8d0bde..d1b3ea540 100644 --- a/src/main/java/core/basesyntax/impl/StorageImpl.java +++ b/src/main/java/core/basesyntax/impl/StorageImpl.java @@ -49,4 +49,4 @@ private int findKeyIndex(K key) { } return -1; } -} \ No newline at end of file +}