2012-06-10 3 views
11

Ho visitato la libreria Google Guava e ho trovato molte buone strutture di dati utilizzabili al suo interno.Per quanto riguarda le prestazioni, quanto è buona la libreria Guava?

Se qualcun altro lo ha utilizzato, è possibile fornire un feedback su come viene eseguito quando viene utilizzato con enormi set di dati? Fondamentalmente sto cercando la notazione BigO per le sue operazioni.

Grazie in anticipo

+2

Quali sono le prestazioni operative che stai cercando in particolare? –

+3

La libreria Guava è grande. Quali operazioni stai guardando in particolare? – Perception

+1

Sarebbe bello fornire come una tabella di nuove operazioni Collections (MultiSet, Multimap, BiMap, Table). Come nella raccolta java [Notazione BigO] (http://simplenotions.wordpress.com/2009/05/13/java-standard-data-structures-big-o-notation/). –

risposta

35

Contribuente di guava qui.

Ehm, cosa c'è da dire? Tutte le raccolte basate su hash (e basate su enum) hanno le operazioni a voce singola in tempo costante, esattamente come ci si aspetterebbe. (HashMultiset, LinkedHashMultiset, ConcurrentHashMultiset, HashBiMap, HashBasedTable, ImmutableSet, ImmutableMap, EnumMultiset, EnumBiMap, ecc tutti rientrano in questa categoria.) Tutte le collezioni basati su alberi/ordinamento hanno tempo logaritmico per le loro operazioni a singolo ingresso, comprese TreeMultiset, ImmutableSortedMap, e ImmutableSortedSet.

Tra multimaps, beh, la documentazione in fondo si dice i Map e il valore di raccolta implementazioni, e si può capirlo da lì. HashMultimap è fondamentalmente un HashMap a HashSet s, LinkedHashMultimap è una LinkedHashMap a LinkedHashSet s, ArrayListMultimap è una HashMap a ArrayList s, LinkedListMultimap è una LinkedHashMap a LinkedList s (performance, se non tecnicamente vero), TreeMultimap è una TreeMap a TreeSet s , ImmutableSetMultimap è un ImmutableMap a ImmutableSet s, ImmutableListMultimap è un ImmutableMap a ImmutableList s.

L'unica cosa che potrebbe non essere auto-evidente è probabilmente che i SortedMultiset implementazioni forniscono subMultiset().size() operazioni in O(log n) tempo, che non si poteva fare solo con un JDK TreeMap<E, Integer>.

Tutte le viste delle raccolte (ci piacciono molto le viste) restituiscono in tempo costante e hanno le asintotiche che ti aspetteresti.

C'è qualcosa di più specifico di cui eri preoccupato?

(In generale, Guava è fondamentalmente le librerie di base utilizzate da Google nella produzione, che mi piacerebbe pensare è una prova abbastanza evidente del fatto che le utility funzionano in modo soddisfacente in ambienti gravosi. ottieni sostanzialmente questi miglioramenti gratuitamente.)

+1

Sumit, consulta [Raccolte immutabili] (http://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained#Where?) E [Nuovi tipi di raccolta] (http://code.google.com/pp/guava-libraries/wiki/NewCollectionTypesExplained) per tabelle che spiegano meglio quale tipo è supportato da cosa. –

+0

Risposta impressionante. –

+1

Meh. Voglio dire ... niente di tutto questo dovrebbe essere sorprendente. Sicuramente, è una delle priorità di Guava per assicurarsi che non ci siano sorprese su queste cose ... –