Поскольку может быть только один нулевой ключ, вы можете просто иметь специальное ссылочное значение (не в массиве), которое содержит значение объекта, отображаемого из этого нулевого ключа (и, возможно, логическое значение, указывающее, было ли это значение задавать). К сожалению, это, вероятно, осложнит итерацию.
E.g.
private boolean isNullMapped = false;
private V nullValue = null;
public put(K key, V value)
{
if (key == null) { nullValue = value; }
...
}
В качестве альтернативы, вы можете обернуть все ключи в объекте обертку (предположим, что вы все еще хотите использовать параллельные массивы вместо записей), и если значение, содержащееся в этом объекте обертку имеет нулевое значение, то оно представляет собой пустой ключ ,
E.g.
private static class KeyWrapper<K>
{
public K key;
}
Наконец, в качестве вопроса для рассмотрения, если у Вас нет записей в массивах, но вместо того, чтобы непосредственно холдинговая массивы K и V, то, как вы учета различных ключей, которые происходят в одни и те же хэш-код? В реализации java.util есть массивы записей, которые также действуют как связанные списки для учета этой возможности (и, кстати, нулевой ключ всегда отображается в индекс массива 0).
Зачем вам хранить «нуль»? Вы разрешите 'null' как действительный ключ? –