Parmi les bibliothèques Guava fournies par Google (si vous ne connaissez pas, je vous les recommande), la classe MapMaker mérite toute votre attention, elle permet de construire des ConcurrentMaps dont le comportement est fortement paramétrable.
Voici un exemple issu de la javadoc :
ConcurrentMap<Key, Graph> graphs = new MapMaker() .concurrencyLevel(32) .softKeys() .weakValues() .expiration(30, TimeUnit.MINUTES) .makeComputingMap( new Function<Key, Graph>() { public Graph apply(Key key) { return createExpensiveGraph(key); } });
Parmi les fonctionnalités intéressantes de cette classe, on peut noter les possibilités:
- utiliser des SoftReference ou WeakReference comme clé ou valeur de la map
- de faire expirer des éléments de la map après un délai déterminé
- de mettre en place un Listener de suppression des éléments
- de générer les éléments de la map à la demande via une fonction de calcul (makeComputingMap)
Puissant et utile !
[ Slides de présentation de Guava ]
[ Les bibliothèques Google Guava ]
[ MapMaker (JavaDoc) ]