Eu estava procurando por uma implementação de mapa bidirecional em Java e me deparei com essas duas bibliotecas:
- Google Guava (anteriormente "Google Collections")
- Colecções Apache Commons
Ambos são gratuitos, têm a implementação de mapa bidirecional que eu estava procurando (BidiMap no Apache, BiMap no Google), são surpreendentemente quase do mesmo tamanho (Apache 493 kB, Google 499 kB) [ed .: não é mais verdade!] E parecem de todas as formas, bem parecido comigo.
Qual devo escolher e por quê? Existem outras alternativas equivalentes (devem ser gratuitas e ter pelo menos o mapa bidirecional)? Estou trabalhando com o Java SE mais recente, portanto, não há necessidade de limitar artificialmente o Java 5 ou algo assim.
java
collections
apache-commons
guava
Joonas Pulakka
fonte
fonte
Respostas:
Na minha opinião, a melhor opção é o Goiaba (anteriormente conhecido como coleções do Google):
CacheBuilder
e seu antecessorMapMaker
é simplesmente incrívelO Apache Commons Collections também é uma boa biblioteca, mas há muito tempo falha em fornecer uma versão habilitada para genéricos (que é uma grande desvantagem para uma API de coleções na minha opinião) e geralmente parece estar em manutenção / não fazer modo -muito-trabalho-sobre-o O Recent Commons Collections recuperou um pouco de força novamente, mas ainda tem muito o que fazer. .
Se o tamanho do download / tamanho da memória / tamanho do código for um problema, o Apache Commons Collections poderá ser um candidato melhor, pois é uma dependência comum de outras bibliotecas. Portanto, usá-lo em seu próprio código também pode ser feito potencialmente sem adicionar dependências adicionais. Edit: Esta "vantagem" específica foi parcialmente subvertida até agora, uma vez que muitas novas bibliotecas realmente dependem do Guava e não do Apache Commons Collections.
fonte
Do FAQ: Perguntas frequentes sobre coleções do Google
fonte
As coisas mais importantes que descobri que fazem do Google Collections o lugar para começar:
Aqui está um ótimo vídeo no Youtube de uma palestra proferida pelo autor principal e ele faz um bom trabalho discutindo o que vale a pena conhecer sobre esta biblioteca.
fonte
Duas outras coisas (espero não estar errado)
fonte
git clone https://code.google.com/p/guava-libraries/
egit checkout v11.0.2
?Uma coisa desagradável no Guava é que o Multimap não estende o java.util.Map. Se você tiver seus próprios métodos que funcionam no Maps, eles não funcionarão no Guava Multimaps (a interface do Apache MultiMap estende o java.util.Map). Tenho certeza de que há uma boa razão para ser desse jeito, mas também é inconveniente.
fonte
Multimap
comoMap
, sempre háasMap()
vista.Map
, com o entendimento de que toda referência aV
realmente será umaCollection<V>
, acho que verá rapidamente porque essa não é uma boa superinterfaceMultimap<K, V>
.