Ваш код точно соответствует одному из вариантов использования OpenHashMap. Ваш код:
println ("scala OpenHashMap: " + time (warmup) {
val m = new scala.collection.mutable.OpenHashMap[Int,Int];
var i = 0;
var start = System.currentTimeMillis();
while(i<100000) { m.put(i,i);i=i+1;};
})
Объяснение для OpenHashMap ( scaladoc ):
Изменяемая карта хеширования, основанная на открытой схеме хеширования. Точная схема
не определен, но он должен приложить разумные усилия для обеспечения того, чтобы
вставка с последовательными хеш-кодами не излишне штрафуется. В
В частности, сопоставления последовательных целочисленных ключей должны работать без
значительная потеря производительности .
Мой акцент. Что объясняет ваши выводы. Когда использовать OpenHashMap вместо HashMap? См. Википедия . Оттуда:
Цепные хеш-таблицы со связанными списками популярны, потому что они требуют
только базовые структуры данных с простыми алгоритмами, и могут использовать простые
хеш-функции, которые не подходят для других методов.
Стоимость табличной операции заключается в сканировании записей
выбранное ведро для нужного ключа. Если распределение ключей
достаточно равномерная, средняя стоимость поиска зависит только от
среднее количество ключей в сегменте, то есть на коэффициент загрузки.
Цепные хеш-таблицы остаются в силе, даже если номер таблицы
записей n намного больше, чем количество слотов. Их производительность
ухудшается более изящно (линейно) с коэффициентом нагрузки. Например,
хеш-таблица с 1000 слотами и 10 000 хранимых ключей (загрузка
коэффициент 10) в пять-десять раз медленнее таблицы на 10 000 слотов (загрузка
фактор 1); но все же в 1000 раз быстрее, чем обычный последовательный список,
и, возможно, даже быстрее, чем сбалансированное дерево поиска.
Для отдельной цепочки наихудший сценарий - это когда все записи
были вставлены в то же ведро, в этом случае хеш-таблица
неэффективен, и стоимость поиска данных ведра
состав. Если последний является линейным списком, процедура поиска может
придется сканировать все его записи; поэтому стоимость в худшем случае пропорциональна
на количество n записей в таблице.
Это общее объяснение. Как и в случае с этими вещами, ваша производительность будет варьироваться в зависимости от варианта использования, если вы заботитесь об этом, вам нужно измерить его.