2012-01-14 14 views
17

La mia comprensione di Multiset è un set con frequenza, ma posso sempre usare Map per rappresentare la frequenza, c'è un altro motivo per usare Multiset?Guava MultiSet vs Mappa?

risposta

31

Vantaggi di un Multiset<E> nel corso di un Map<E, Integer>:

  • Nessun codice speciale richiesto quando si aggiunge un elemento che non è già nella collezione.
  • Metodi per gestire direttamente il conteggio degli elementi: count(E), add(E, int), ecc.
  • L'intenzione del codice è più chiara. A Multiset<E> ovviamente associa gli elementi ai loro conteggi. Un Map<E, Integer> potrebbe mappare gli elementi a numeri interi arbitrari.

Consulta anche:

Multiset Javadoc

Multiset explained in the Guava Wiki

+5

Oltre ad essere probabilmente più efficiente dell'implementazione, Multiset rende più chiaro ciò che si sta tentando di fare ed è più difficile rovinare. In genere, con una mappa , hai a che fare con un sacco di cose: controllare se la chiave è già nella mappa, occuparsi del conteggio zero e di tutti i tipi di attività complicate. Multiset funziona. –

8

Per me, il punto più importante che imposta Multiset a parte un Map è che si tratta di un Collection: hai appena messo roba in esso e puoi ottenere dei conteggi più tardi. Concettualmente si adatta ai casi d'uso per i quali è stato progettato laddove non lo è un Map. Per quei casi d'uso, uno Map è solo un hack che kinda-kind funziona bene poiché Java non fornisce nulla di più appropriato.