Existe-t-il une alternative à Guava Tables qui utilise des primitives, au lieu de types génériques, comme clés?Alternative à la table Guava
Je souhaite utiliser des primitives pour éviter la mise en boîte automatique provoquée par l'utilisation de Java Numbers et des objets d'entrée supplémentaires créés par Java Maps.
J'ai roulé mon propre LongLongObjectTable de base en utilisant Trove TLongObjectMap, mais je préférerais utiliser une bibliothèque standard si elle est disponible.
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;
}
}
Les cartes, listes, jeux Java fonctionnent sur des objets. À la fin, la boxe se produira de toute façon de les utiliser. À mon humble avis, il ne vaut pas la peine de se battre contre. Si vous avez besoin d'une interface plus simple, vous pouvez toujours l'implémenter avec un modèle de délégation comme celui que vous avez collé. – allprog
Avez-vous profilé votre application? Vous pourriez être très bien avec les tables de Guava malgré les objets de boxe et d'entrée. –
À mon humble avis cela ressemble à une optimisation précoce. Je comprends que vous voulez rendre votre application aussi rapide que possible. Mais pour que l'autoboxing commence à être un goulot d'étranglement, vous auriez besoin d'une charge de '> 10^n' opérations par seconde, avec' n' selon votre problème spécifique, mais en général 'n> 3'. Êtes-vous sûr que c'est votre cas? –