Esiste un'alternativa a Guava Tables che utilizza come chiavi le primitive, anziché i tipi generici?Alternativa primitiva a Guava Tabella
Vorrei utilizzare le primitive per evitare il box automatico causato dall'utilizzo di Numeri Java e degli oggetti voce aggiuntivi creati da Java Maps.
Ho eseguito il rollover del mio LongLongObjectTable di base utilizzando Trove TLongObjectMap, ma preferirei utilizzare una libreria standard se disponibile.
private static class LongLongObjectTable<T> {
private final TLongObjectMap<TLongObjectMap<T>> backingMap = new TLongObjectHashMap<>();
T get(final long rowKey, final long columnKey) {
final TLongObjectMap<T> map = this.backingMap.get(rowKey);
if (map == null) {
return null;
}
return map.get(columnKey);
}
void put(final long rowKey, final long columnKey, final T value) {
TLongObjectMap<T> map = this.backingMap.get(rowKey);
if (map == null) {
map = new TLongObjectHashMap<>();
this.backingMap.put(rowKey, map);
}
map.put(columnKey, value);
}
Collection<T> values() {
final List<T> values = new ArrayList<T>();
for (final TLongObjectMap<T> map : this.backingMap.valueCollection()) {
values.addAll(map.valueCollection());
}
return values;
}
}
Mappe, elenchi, insiemi in Java operano sugli oggetti. Alla fine la boxe avverrà comunque che li usi. IMHO non vale la pena lottare contro di esso. Se hai bisogno di un'interfaccia più semplice, puoi sempre implementarla con un modello di delega come quello che hai incollato. – allprog
Hai profilato la tua domanda? Potresti stare bene con i Tavoli di Guava, nonostante gli oggetti di boxe e di entrata. –
IMHO questo sembra l'ottimizzazione iniziale. Capisco che tu voglia far funzionare la tua app il più velocemente possibile. Ma per l'autoboxing per iniziare a essere un collo di bottiglia, avresti bisogno di un carico di '> 10^n' operazioni al secondo, con' n' a seconda del tuo problema specifico, anche se in generale 'n> 3'. Sei sicuro che questo sia il tuo caso? –