Je cherchais une implémentation de carte bidirectionnelle en Java et suis tombé sur ces deux bibliothèques:
- Google Guava (anciennement "Google Collections")
- Collections de la famille Apache Commons
Les deux sont gratuits, ont l'implémentation de carte bidirectionnelle que je cherchais (BidiMap dans Apache, BiMap dans Google), sont étonnamment presque de la même taille (Apache 493 kB, Google 499 kB) [éd .: n'est plus vrai!] Et semblent à tous égards assez semblable à moi.
Lequel devrais-je choisir et pourquoi? Existe-t-il d'autres alternatives équivalentes (doivent être gratuites et avoir au moins la carte bidirectionnelle)? Je travaille avec le dernier Java SE, donc pas besoin de se limiter artificiellement à Java 5 ou quelque chose comme ça.
java
collections
apache-commons
guava
Joonas Pulakka
la source
la source
Réponses:
À mon avis, le meilleur choix est la goyave (anciennement connue sous le nom de collections Google):
CacheBuilder
et son prédécesseurMapMaker
est tout simplement génialApache Commons Collections est également une bonne bibliothèque, mais il a longtemps échoué à fournir une version compatible avec les génériques (ce qui est un inconvénient majeur pour une API de collections à mon avis) et semble généralement être dans une maintenance / ne pas faire -trop-beaucoup-travail-sur-it Récemment, Commons Collections a repris un peu de vapeur, mais il a du rattrapage à faire. .
Si la taille du téléchargement / l'encombrement de la mémoire / la taille du code est un problème, Apache Commons Collections pourrait être un meilleur candidat, car il s'agit d'une dépendance commune à d'autres bibliothèques. Par conséquent, son utilisation dans votre propre code pourrait également se faire sans ajouter de dépendances supplémentaires. Edit: Cet "avantage" particulier a été partiellement renversé à ce jour, car de nombreuses nouvelles bibliothèques dépendent en fait de Guava et non des collections Apache Commons.
la source
De la faq: FAQ Google Collections
la source
Les choses les plus importantes que j'ai trouvées qui font de Google Collections le point de départ:
Voici une excellente vidéo Youtube d'une conférence donnée par l'auteur principal et il fait du bon travail pour discuter de ce qui vaut la peine d'être connu sur cette bibliothèque.
la source
Deux autres choses (j'espère que je ne me trompe pas)
la source
git clone https://code.google.com/p/guava-libraries/
etgit checkout v11.0.2
?Une chose désagréable à propos de Guava est que Multimap n'étend pas java.util.Map. Si vous avez vos propres méthodes qui fonctionnent sur Maps, elles ne fonctionneront pas sur Guava Multimaps (l'interface Apache MultiMap étend java.util.Map). Je suis sûr qu'il y a une bonne raison pour laquelle c'est comme ça mais c'est aussi gênant.
la source
Multimap
commeMap
, il y a toujours uneasMap()
vue.Map
, sachant que chaque référenceV
sera en fait unCollection<V>
, je pense que vous verrez assez rapidement pourquoi ce n'est pas une bonne superinterfaceMultimap<K, V>
.