From f4d224496faf3eea0a5616b84ecb049099e65ad4 Mon Sep 17 00:00:00 2001 From: AlexPranschke Date: Mon, 18 May 2026 21:54:03 +0200 Subject: [PATCH 1/5] first commit --- src/main/java/core/basesyntax/MyHashMap.java | 70 +++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/src/main/java/core/basesyntax/MyHashMap.java b/src/main/java/core/basesyntax/MyHashMap.java index d9beffedf..d285e8e1d 100644 --- a/src/main/java/core/basesyntax/MyHashMap.java +++ b/src/main/java/core/basesyntax/MyHashMap.java @@ -1,19 +1,87 @@ package core.basesyntax; public class MyHashMap implements MyMap { + private Node[] table; + private int size; + private static final int DEFAULT_CAPACITY = 16; + private static final float LOAD_FACTOR = 0.75f; + + + public MyHashMap() { + table = new Node[DEFAULT_CAPACITY]; + size = 0; + } + + public void checkThreshold() { + if (size >= table.length * LOAD_FACTOR) { + resize(); + } + } + + public void resize() { + Node[] oldTable = table; + table = new Node[oldTable.length * 2]; + size = 0; + + for (Node node : oldTable) { + while (node != null) { + put(node.key, node.value); + node = node.next; + } + } + } @Override public void put(K key, V value) { + int hash = key == null ? 0 : key.hashCode(); + int index = hash & (table.length - 1); + + Node current = table[index]; + while (current != null) { + if ((current.key == null && key == null) || (current.key != null && current.key.equals(key))) { + current.value = value; + return; + } + current = current.next; + } + Node newNode = new Node<>(key, value); + newNode.hash = hash; + newNode.next = table[index]; + table[index] = newNode; + size++; + checkThreshold(); } @Override public V getValue(K key) { + int hash = key == null ? 0 : key.hashCode(); + int index = hash & (table.length - 1); + + Node current = table[index]; + while (current != null) { + if ((current.key == null && key == null) || (current.key != null && current.key.equals(key))) { + return current.value; + } + current = current.next; + } return null; } @Override public int getSize() { - return 0; + return size; + } + + private static class Node { + private final K key; + private V value; + private int hash; + private Node next; + + public Node(K key, V value) { + this.key = key; + this.value = value; + } } } From 25bcdecfd99aef2c9aa524d28358ea9d9c6b3b18 Mon Sep 17 00:00:00 2001 From: AlexPranschke Date: Sat, 23 May 2026 21:56:13 +0200 Subject: [PATCH 2/5] fix public to private --- src/main/java/core/basesyntax/MyHashMap.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/core/basesyntax/MyHashMap.java b/src/main/java/core/basesyntax/MyHashMap.java index d285e8e1d..35e1e74b1 100644 --- a/src/main/java/core/basesyntax/MyHashMap.java +++ b/src/main/java/core/basesyntax/MyHashMap.java @@ -12,13 +12,13 @@ public MyHashMap() { size = 0; } - public void checkThreshold() { + private void checkThreshold() { if (size >= table.length * LOAD_FACTOR) { resize(); } } - public void resize() { + private void resize() { Node[] oldTable = table; table = new Node[oldTable.length * 2]; size = 0; From 869c43227e434203a9be487ff1c61afeb460360d Mon Sep 17 00:00:00 2001 From: AlexPranschke Date: Sat, 23 May 2026 22:02:30 +0200 Subject: [PATCH 3/5] removing magic number --- src/main/java/core/basesyntax/MyHashMap.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/core/basesyntax/MyHashMap.java b/src/main/java/core/basesyntax/MyHashMap.java index 35e1e74b1..85cf5dd73 100644 --- a/src/main/java/core/basesyntax/MyHashMap.java +++ b/src/main/java/core/basesyntax/MyHashMap.java @@ -4,9 +4,11 @@ public class MyHashMap implements MyMap { private Node[] table; private int size; private static final int DEFAULT_CAPACITY = 16; + private static final int DEFAULT_RESIZE= 2; private static final float LOAD_FACTOR = 0.75f; + public MyHashMap() { table = new Node[DEFAULT_CAPACITY]; size = 0; @@ -20,7 +22,7 @@ private void checkThreshold() { private void resize() { Node[] oldTable = table; - table = new Node[oldTable.length * 2]; + table = new Node[oldTable.length * DEFAULT_RESIZE]; size = 0; for (Node node : oldTable) { From e867ed23f47ec5d43f04c3a515080d0a1e970958 Mon Sep 17 00:00:00 2001 From: AlexPranschke Date: Sat, 23 May 2026 22:19:23 +0200 Subject: [PATCH 4/5] fix --- src/main/java/core/basesyntax/MyHashMap.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/core/basesyntax/MyHashMap.java b/src/main/java/core/basesyntax/MyHashMap.java index 85cf5dd73..acab70c28 100644 --- a/src/main/java/core/basesyntax/MyHashMap.java +++ b/src/main/java/core/basesyntax/MyHashMap.java @@ -1,13 +1,10 @@ package core.basesyntax; - public class MyHashMap implements MyMap { - private Node[] table; - private int size; private static final int DEFAULT_CAPACITY = 16; private static final int DEFAULT_RESIZE= 2; private static final float LOAD_FACTOR = 0.75f; - - + private Node[] table; + private int size; public MyHashMap() { table = new Node[DEFAULT_CAPACITY]; From 051693b6b670f1a84146845e5a96d78e4c0fe837 Mon Sep 17 00:00:00 2001 From: AlexPranschke Date: Sat, 23 May 2026 22:20:52 +0200 Subject: [PATCH 5/5] ... --- src/main/java/core/basesyntax/MyHashMap.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/core/basesyntax/MyHashMap.java b/src/main/java/core/basesyntax/MyHashMap.java index acab70c28..3ad901980 100644 --- a/src/main/java/core/basesyntax/MyHashMap.java +++ b/src/main/java/core/basesyntax/MyHashMap.java @@ -1,7 +1,7 @@ package core.basesyntax; public class MyHashMap implements MyMap { private static final int DEFAULT_CAPACITY = 16; - private static final int DEFAULT_RESIZE= 2; + private static final int DEFAULT_RESIZE = 2; private static final float LOAD_FACTOR = 0.75f; private Node[] table; private int size; @@ -37,7 +37,8 @@ public void put(K key, V value) { Node current = table[index]; while (current != null) { - if ((current.key == null && key == null) || (current.key != null && current.key.equals(key))) { + if ((current.key == null && key == null) + || (current.key != null && current.key.equals(key))) { current.value = value; return; } @@ -59,7 +60,8 @@ public V getValue(K key) { Node current = table[index]; while (current != null) { - if ((current.key == null && key == null) || (current.key != null && current.key.equals(key))) { + if ((current.key == null && key == null) + || (current.key != null && current.key.equals(key))) { return current.value; } current = current.next;