Следует учитывать, что HashTable
в Java использует реализацию с закрытой адресацией (без зондирования), поэтому у вас есть отдельные сегменты, в которые можно поместить много элементов. Это не то, что вы ищете в своих тестах. Я не уверен в реализации HashMap
, но думаю, что она также использует открытую адресацию.
Так что забудьте о классах JDK .. поскольку вы хотите вычислять эмпирические значения, вы должны написать свою собственную версию хеш-таблицы, которая использует реализацию с открытой адресацией с линейным зондированием , но вы должны позаботьтесь о подсчете длины зонда всякий раз, когда вы пытаетесь получить значение из хэш-карты.
Например, вы можете написать свою хэш-карту, а затем позаботиться о наличии
class YourHashMap
{
int empiricalGet(K key)
{
// search for the key but store the probe length of this get operation
return probeLength;
}
}
Затем вы можете легко сравнить его, выполнив поиск требуемого количества клавиш и рассчитав среднюю длину зонда.
В противном случае вы можете просто предоставить hasmap возможность сохранять общую длину зонда и количество запрошенных запросов и извлекать их после запуска теста для вычисления среднего значения.
Этот вид упражнений должен доказать, что эмпирическая ценность соответствует теоретической. Поэтому примите также во внимание тот факт, что вам может понадобиться много тестов, а затем выполните среднее из всех, убедившись, что дисперсия не слишком высока.