2015-09-18 10 views
6

Durante l'utilizzo della HashMap fornita da java 7, ho riscontrato il problema che get() si evolve da O (1) a O (n) come descritto here e risolto in java 8.Mappa con get() veloce e costante per Java 7

Ma poiché devo attenermi a java 7 e non posso aggiornare il progetto, sto cercando una libreria o un qualsiasi modo per avere una mappa con un get veloce e costante().

+1

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

+0

Una maggiore capacità iniziale impedirà più collisioni tra i diversi hashCode (spazio/costi di tempo). La cosa migliore (anche per java 8) sarebbe controllare gli hashCode creati per miglioramenti. –

+3

Sei sicuro di avere davvero tante collisioni di hash? Qual è il tuo tipo di chiave? –

risposta

7

L'essenza del cambiamento in Java 8:

dal tuo link Performance Improvement for HashMap in Java 8

Benne contenenti un gran numero di chiavi in ​​collisione memorizzerà le loro voci in un albero bilanciato invece di una lista collegata dopo un certo soglia è raggiunta.

si potrebbe ottenere l'equivalente, riducendo il numero di collisione chiavi migliorando la hashCode implementazione.

Senza i dettagli del calcolo hashCode o il modello dei valori è difficile consigliare ulteriormente.