Вот мой метод реализации HashMap put()
. Он работает около 1500 мс для 100 000 элементов, а Collections
- HashMap работает через 8 мс.Java/HashMap/Performance
Что делает такую огромную разницу в производительности?
(Моя хэш-функция просто на основе хэш-код(), коэффициент загрузки составляет около 0,6 поэтому он должен хорошо работать)
public boolean put(K key, V value)
{
if (size > cap*LOAD_FACTOR) expand();
int i;
for(i=hash(key);container[i] != null;i=(i+1) % cap)
{
if(container[i].key.equals(key))
{
container[i] = new Entry<K,V>(key,value);
return true;
}
}
container[i] = new Entry<K,V>(key,value);
size++;
return true;
Как вы измерить эти цифры? Если вы не использовали подходящий инструмент сравнения, вы можете выбросить их с балкона. – Tunaki
Консоль и 'System.nanotime()' с фазой разминки :) –
вы обычно не можете конкурировать с реализациями JVM. они высоко оптимизированы для разных типов, распределения памяти и т. д. некоторые контейнеры работают непосредственно с базовым кодом, который вы не можете достичь с чистой реализацией Java. –