Domanda

uso correlazione caso:

read input 

if (correlation-id is already generated for this input) 
{ 
   lookup the correlation-id from the cache; 
   return correlation-id; 
} 

else 
{ 
   generate the correlation-id; 
   cache it; 
   return correlation-id; 
} 

Vincoli: - Il numero di record di input può andare fino a 500K in modo non vuole utilizzare riferimenti forti. - non vuole generare senso unico hash fin d'ora (lo so che se utilizzare hash unidirezionale allora non c'è alcuna necessità di cache)

Qualcuno può dirmi come utilizzare ComputingMap per questo. Chiedo questo perché non v'è una nota nella javadoc che dice "usa un'identità uguaglianza per chiavi deboli / soft".

È stato utile?

Soluzione

Con le classi / Collezione Google guava e tasti funzione o deboli o valori le chiavi deve essere riferimenti forti per la mappa da utilizzare equals () == e non ad occhiata valori memorizzati nella cache. Se si dispone di chiavi deboli / soft allora la ricerca viene fatta con l'identità così otterrai sempre una miss della cache. Quindi, se si desidera che il garbage collector di elementi GC dalla cache, allora avrete bisogno di rendere i valori morbido o debole.

Capisco Google aggiungerà una funzione di equivalenza in futuro in modo si può affermare se si vuole equals () o == e non hanno questa scelta fatta per voi con la scelta di riferimenti forti, deboli o morbidi.

Dal momento che l'oggetto Tuple implementa equals () e hashCode (), poi basta fare

new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Tuple,String>() {
                                         public String apply(Tuple t) {
                                             // generate the correlation-id
                                         }
                                    });
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top