2015-04-07 10 views
20

Scala ma kolekcję TrieMap.Co to jest TrieMap i jakie są jego zalety/wady w porównaniu z HashMap?

Co to jest TrieMap i jakie są jego zalety/wady w porównaniu z HashMap?

+0

A może: http://stackoverflow.com/questions/18660769/best-practices-for-mixing-in-scala-concurrent-map –

+1

Zdecydowanie nie duplikat. Waszą największą zaletą jest to, że Scala TrieMaps zapewnia wydajne, spójne iteratory, które przechwytują wszystkie elementy w triarze w pewnym momencie. – axel22

Odpowiedz

20

Scala TrieMap jest opartą na trocie implementacją skalowalnej mapy . W przeciwieństwie do normalnych map Trie, Scala TrieMap ma wydajną, nie blokującą operację O (1) czasową snapshot (i nieco zoptymalizowaną).

Absolutna wydajność z TrieMap jest nieco poniżej JDK8 ConcurrentHashMap, ale zaletą jest to, że zapewnia spójnych iteratory coś, co współbieżnych struktur danych zazwyczaj nie mają. Oznacza to, że możesz przechwycić wszystkie elementy w trie w jednym momencie (numery wydajności i analiza here). Powinieneś użyć TrieMap, jeśli chcesz uchwycić wszystkie elementy naraz (np. Aby wyświetlić wszystkie elementy w interfejsie lub konsekwentnie je analizować).

+1

Nie ma to związku, ale dostępny jest port Open-source skali TrieMap do Java: https://github.com/romix/java-concurrent-hash-trie-map. – Pinch

19

TrieMaps to Mapy wykorzystujące strukturę danych Trie, które są w zasadzie płytkimi drzewami. Na przykład, jeśli masz 32-bitowy skrót, podziel go na sekcje, na przykład 4 razy 8 i na każdym poziomie drzewa, które rozgałęzisz, aż do 256 pod drzew. Oczywiście daje to wydajność O (1) ze względu na rozmiar skrótu (przyjmując kilka kolizji).

Strukturę trie można sprawić, że jest niezmienna, ponownie wykorzystując strukturę trieta, aby utworzyć nowy trie z dodanym lub usuniętym elementem. Względna wydajność w czasie/pamięci wpływa na GC zależy w dużej mierze od wdrożenia i obciążenia, a więc spróbuj ogólną odpowiedź Powiedziałbym, uruchomić test porównawczy. Chociaż w przypadku pojedynczego wątku bez wymogu niezmienności, klasyczna niedziała zwykle zapewnia lepszą średnią wydajność i gorszą wydajność w najgorszym przypadku.

Jako wzmiankę na marginesie wspomnę, ponieważ trieMap również używa skrótu, jest także hashmapem, więc poleciłabym wywołanie go jako trash backed hashmap vs hashmap z tablicą.