Ваш вопрос очень разумный и является одной из известных проблем с линейным зондированием.
Проблема в том, что если один из элементов вашей карты будет удален, то при попытке поиска цените то, что в процессе поиска вы должны пройти через удаленный элемент, вы не сможете его найти.
Вы также можете задать его по-другому, как правильно искать значение, если вы знаете, что некоторые значения в пути могут быть нулевыми (удаленные элементы).
Одним из решений будет поиск до тех пор, пока вы не пройдете всю карту, и, если он не найден, верните ноль. Но это действительно плохое решение, потому что каждый раз, когда вы используете свой метод get (или содержит) для значения, которого нет на карте, вам придется go пройти по всей карте (сложность O (n)) что неприемлемо, потому что HashMaps должны реализовывать эти методы как минимум в среднем постоянной сложности (* O (1)).
Так что существует множество решений, и вы можете исследовать и читать о них. Я дам вам одно решение, которое я знаю:
В вашем HashMap сохраните другой массив, который будет содержать при каждом индексе максимальное количество шагов (или скачков), которые требовались для того, чтобы поместить значение в карту где этот индекс был первым, к которому вы пришли. Каждый раз, когда вы помещаете новое значение в карту (используя метод put), ваш метод запоминает первый индекс, к которому вы перешли, и затем, если общее количество прыжков, через которое вы должны были пройти go, было больше, чем максимальное число шагов в этом индексе в ваш вспомогательный массив, вы обновляете его.
Теперь, в ваших методах get () и contains (), когда вы делаете первый шаг, вы читаете максимальные шаги, которые разрешены из вспомогательного массива, а затем вы нужно только перепрыгнуть это количество шагов, пока вы не будете уверены, что ваше значение не существует. Это вместо остановки, когда вы получаете нулевой ключ.