2012-06-10 13 views
11

He estado en la biblioteca Google Guava y encontré muchas estructuras de datos útiles y útiles.En cuanto a rendimiento, ¿qué tan buena es la biblioteca de guayaba?

Si alguien más lo ha usado, ¿puede darnos su opinión sobre cómo se comportó cuando se utilizó con grandes conjuntos de datos? Básicamente estoy buscando la notación BigO para sus operaciones.

Gracias de antemano

+2

¿Qué rendimiento de funcionamiento estás buscando específicamente? –

+3

La biblioteca de Guava es grande. ¿Qué operaciones estás mirando en particular? – Perception

+1

Sería genial proporcionar como gráfico la nueva operación de Colecciones (MultiSet, Multimap, BiMap, Table). Como en la colección java [Notación BigO] (http://simplenotions.wordpress.com/2009/05/13/java-standard-data-structures-big-o-notation/). –

Respuesta

35

Contribuyente de guayaba aquí.

Um, ¿qué hay para decir? Todas las colecciones basadas en hash (y enum) tienen operaciones de entrada única en tiempo constante, exactamente como era de esperar. (HashMultiset, LinkedHashMultiset, ConcurrentHashMultiset, HashBiMap, HashBasedTable, ImmutableSet, ImmutableMap, EnumMultiset, EnumBiMap, etc. todos caen en esa categoría.) Todas las colecciones basadas en árboles/ordenada logarítmica tiene tiempo para sus operaciones de una sola entrada, incluyendo TreeMultiset, ImmutableSortedMap, y ImmutableSortedSet.

Entre multimaps, bueno, la documentación básicamente le dice Map y las implementaciones de recopilación de valores, y puede averiguarlo desde allí. HashMultimap es básicamente un HashMap a HashSet s, LinkedHashMultimap es un LinkedHashMap a LinkedHashSet s, ArrayListMultimap es un HashMap a ArrayList s, LinkedListMultimap es un LinkedHashMap a LinkedList s (en cuanto al rendimiento, si no es técnicamente cierto), TreeMultimap es un TreeMap a TreeSet s , ImmutableSetMultimap es un ImmutableMap a ImmutableSet s, ImmutableListMultimap es un ImmutableMap a ImmutableList s.

La única cosa que podría no ser evidente por sí mismo es, probablemente, que los SortedMultiset implementaciones proporcionan subMultiset().size() operaciones en O(log n) tiempo, lo que no se podía hacer sólo con un JDK TreeMap<E, Integer>.

Todas las vistas de las colecciones (nos gustan mucho las vistas) regresan en tiempo constante y tienen las asintóticas que esperarías.

¿Hay algo más específico que le preocupe?

(En general, Guava es básicamente el núcleo de las bibliotecas que Google usa en producción, lo que me gustaría considerar una evidencia bastante sólida de que las utilidades funcionan satisfactoriamente en entornos de trabajo pesado. Además, se mejora constantemente, y obtienes esas mejoras básicamente gratis.)

+1

Sumit, consulte [Colecciones inmutables] (http://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained#Where?) Y [Nuevos tipos de colecciones] (http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained) para tablas que explican mejor qué tipo está respaldado por qué. –

+0

Impresionante respuesta. –

+1

Meh. Quiero decir ... nada de esto debería ser sorprendente. Ciertamente, es una de las prioridades de Guava asegurarse de que no haya sorpresas sobre estas cosas ... –

Cuestiones relacionadas