public V put(final K key, final V value)
    {
        final Object val = mapNullValue(value);
        requireNonNull(val, "value cannot be null");

        final Object[] entries = this.entries;
        final int mask = entries.length - 1;
        int keyIndex = Hashing.evenHash(key.hashCode(), mask);

        Object oldValue;
        while (null != (oldValue = entries[keyIndex + 1]))
        {
            if (Objects.equals(entries[keyIndex], key))
            {
                break;
            }

            keyIndex = next(keyIndex, mask);
        }

        if (null == oldValue)
        {
            ++size;
            entries[keyIndex] = key;
        }

        entries[keyIndex + 1] = val;

        increaseCapacity();

        return unmapNullValue(oldValue);
    }
@Test
    void shouldCopyConstructAndBeEqual()
    {
        final int[] testEntries = { 3, 1, 19, 7, 11, 12, 7 };

        final Object2ObjectHashMap<String, Integer> map = new Object2ObjectHashMap<>();
        for (final int testEntry : testEntries)
        {
            map.put(String.valueOf(testEntry), testEntry);
        }

        final Object2ObjectHashMap<String, Integer> mapCopy = new Object2ObjectHashMap<>(map);
        assertEquals(map, mapCopy);
    }