diff --git a/second-part/hw-01/src/app/src/main/java/org/example/MyHashMap.java b/second-part/hw-01/src/app/src/main/java/org/example/MyHashMap.java index ac5cedf..a850431 100644 --- a/second-part/hw-01/src/app/src/main/java/org/example/MyHashMap.java +++ b/second-part/hw-01/src/app/src/main/java/org/example/MyHashMap.java @@ -1,5 +1,7 @@ package org.example; +import java.util.Objects; + public class MyHashMap { private Key[] keys; @@ -24,11 +26,22 @@ public class MyHashMap { resize(); } - int index = findEmptyIndex(key); - if (keys[index] != null) { - Value oldValue = values[index]; - values[index] = value; - return oldValue; + int index = index(key); + int start = index; + + while (keys[index] != null || deleted[index]) { + if (!deleted[index] && Objects.equals(keys[index], key)) { + Value oldValue = values[index]; + values[index] = value; + return oldValue; + } + + index = (index + 1) % keys.length; + + if (index == start) { + resize(); + return put(key, value); + } } keys[index] = key; @@ -58,7 +71,7 @@ public class MyHashMap { int start = index; while (keys[index] != null || deleted[index]) { - if (!deleted[index] && java.util.Objects.equals(keys[index], key)) { + if (!deleted[index] && Objects.equals(keys[index], key)) { return index; } @@ -72,28 +85,8 @@ public class MyHashMap { return -1; } - private int findEmptyIndex(Key key) { - int index = index(key); - int start = index; - - while (keys[index] != null && !deleted[index]) { - if (java.util.Objects.equals(keys[index], key)) { - return index; - } - - index = (index + 1) % keys.length; - - if (index == start) { - resize(); - return findEmptyIndex(key); - } - } - - return index; - } - private int index(Key key) { - return Math.floorMod(key == null ? 0 : key.hashCode(), keys.length); + return Math.floorMod(key.hashCode(), keys.length); } private void resize() {