public int put(final K key, final int value)
    {
        final int initialValue = this.initialValue;
        if (initialValue == value)
        {
            throw new IllegalArgumentException("cannot accept initialValue");
        }

        final K[] keys = this.keys;
        final int[] values = this.values;
        @DoNotSub final int mask = values.length - 1;
        @DoNotSub int index = Hashing.hash(key, mask);
        int oldValue = initialValue;

        while (values[index] != initialValue)
        {
            if (Objects.equals(keys[index], key))
            {
                oldValue = values[index];
                break;
            }

            index = ++index & mask;
        }

        if (oldValue == initialValue)
        {
            ++size;
            keys[index] = key;
        }

        values[index] = value;

        increaseCapacity();

        return oldValue;
    }
@Test
    void shouldNotAllowInitialValueAsValue()
    {
        assertThrows(IllegalArgumentException.class, () -> map.put(1, INITIAL_VALUE));
    }