Estaba buscando una implementación de mapa bidireccional en Java, y me topé con estas dos bibliotecas:
- Google Guava (anteriormente "Colecciones de Google")
- Colecciones Apache Commons
Ambos son gratuitos, tienen la implementación del mapa bidireccional que estaba buscando (BidiMap en Apache, BiMap en Google), son increíblemente casi del mismo tamaño (Apache 493 kB, Google 499 kB) [ed .: ¡ya no es cierto!] Y parecen en todos los sentidos bastante similar a mí.
¿Cuál debo elegir y por qué? ¿Existen otras alternativas equivalentes (deben ser gratuitas y tener al menos el mapa bidireccional)? Estoy trabajando con el último Java SE, por lo que no es necesario limitar artificialmente a Java 5 ni nada por el estilo.
java
collections
apache-commons
guava
Joonas Pulakka
fuente
fuente
Respuestas:
En mi opinión, la mejor opción es la guayaba (anteriormente conocida como colecciones de Google):
CacheBuilder
y su predecesorMapMaker
es simplemente increíbleApache Commons Collections también es una buena biblioteca, pero durante mucho tiempo no ha podido proporcionar una versión genérica habilitada (que es un gran inconveniente para una API de colecciones en mi opinión) y, en general, parece estar en mantenimiento / no hacer -todo-mucho-trabajo-en-modo Recientemente, Commons Commons Collections ha recogido algo de fuerza nuevamente, pero tiene que ponerse al día. .
Si el tamaño de descarga / huella de memoria / tamaño de código es un problema, entonces Apache Commons Collections podría ser un mejor candidato, ya que es una dependencia común de otras bibliotecas. Por lo tanto, usarlo en su propio código también podría hacerse sin agregar ninguna dependencia adicional. Editar: esta "ventaja" en particular se ha subvertido parcialmente ahora, ya que muchas bibliotecas nuevas realmente dependen de Guava y no de las colecciones de Apache Commons.
fuente
De las preguntas frecuentes : Preguntas frecuentes sobre las colecciones de Google
fuente
Las cosas más importantes que he encontrado que hacen de Google Collections el lugar para comenzar:
Aquí hay un gran video de YouTube de una charla dada por el autor principal y él hace un buen trabajo al discutir lo que vale la pena saber sobre esta biblioteca.
fuente
Otras dos cosas (espero no estar equivocado)
fuente
git clone https://code.google.com/p/guava-libraries/
ygit checkout v11.0.2
?Una cosa desagradable sobre Guava es que Multimap no extiende java.util.Map. Si tiene sus propios métodos que funcionan en Maps, no funcionarán en Guava Multimaps (la interfaz Apache MultiMap sí extiende java.util.Map). Estoy seguro de que hay una buena razón por la cual es así, pero también es inconveniente.
fuente
Multimap
likeMap
, siempre hayasMap()
vista.Map
, con el entendimiento de que cada referenciaV
será realmenteCollection<V>
, creo que verá muy rápidamente por qué no es una buena superinterfazMultimap<K, V>
.