2012-01-14 6 views
17

Moje rozumienie Multiset to zestaw z częstotliwością, ale zawsze mogę użyć mapy do przedstawienia częstotliwości, czy istnieje inny powód, aby używać Multiset?Guava MultiSet vs mapa?

Odpowiedz

31

Zalety Multiset<E> ponad Map<E, Integer>:

  • No specjalny kod wymagany podczas dodawania elementu, który nie jest już w kolekcji.
  • Metody obchodzenia się liczbę elementów bezpośrednio: count(E), add(E, int) itp
  • zamiarem kodu jest wyraźniejszy. A Multiset<E> oczywiście odwzorowuje elementy na ich liczby. A Map<E, Integer> może odwzorować elementy na dowolne liczby całkowite.

Zobacz także:

Multiset Javadoc

Multiset explained in the Guava Wiki

+5

Oprócz tego, że Multiset jest prawdopodobnie bardziej wydajny niż twoje wdrożenie, sprawia, że ​​staje się on bardziej przejrzysty i trudniej jest go zepsuć. Zazwyczaj z mapą masz do czynienia z wieloma rzeczami: sprawdzenie, czy klucz jest już na mapie, zajmowanie się zerem i wszystkimi trudnymi sprawami. Multiset po prostu działa. –

8

Dla mnie najważniejszy punkt, który wyznacza Multiset oprócz Map jest to, że jest to Collection: wystarczy umieścić rzeczy w nim i możesz liczyć później. Konceptualnie pasuje do przypadków użycia, dla których jest zaprojektowany, gdzie nie ma Map. W takich przypadkach, Map jest po prostu hackem, który kinda-sorta działa poprawnie, ponieważ Java nie zapewnia niczego bardziej odpowiedniego.