2015-09-18 16 views
6

Podczas korzystania z HashMap, którą zapewnia java 7, natknąłem się na problem, który get() ewoluuje od O (1) do O (n) jak opisano here i rozwiązany w java 8.Mapa z szybkim i stałym get() dla Java 7

Ale ponieważ muszę trzymać się Java 7 i nie mogę uaktualnić projektu, szukam biblioteki lub dowolnego sposobu na posiadanie mapy z szybkim i stałym get().

+1

http://java-performance.info/hashmap-overview-jdk-fastutil-goldman-sachs-hppc-koloboke-trove-january-2015/ – assylias

+0

Większa pojemność początkowa zapobiegnie większej kolizji między różnymi hash-kodesami (space/koszty czasu). Najlepszym (również dla java 8) byłoby sprawdzenie utworzonych kodów hash w celu ulepszenia. –

+3

Czy na pewno masz tak wiele konfliktów mieszających? Jaki jest twój kluczowy typ? –

Odpowiedz

7

Istotą zmian w Java 8:

Od linku Performance Improvement for HashMap in Java 8

Wiadra zawierające dużą liczbę klawiszy zderzających będzie przechowywać swoje dane w zrównoważony drzewa zamiast połączonej listy po upływie określonego próg został osiągnięty.

Można osiągnąć równowartość przez zmniejszenie liczby zderzających kluczy poprzez poprawę implementacji hashCode.

Bez szczegółowych obliczeń lub wzoru wartości trudno jest doradzić dalej.