Najszybszym algorytmem mieszania pasującym do rachunku wydaje się być obecnie xxHash. Projekt lz4-java zawiera implementation ported to Java. Nie wiem, czy implementacja Java została porównana z programem MurmurHash; Optymalizacje wydajności w C++ nie zawsze przesyłają się do/z Java. (W szczególności, xxHash zawiera więcej dostępu do tablicy, więc nie może być nieistotnego ograniczenia do sprawdzania ograniczeń).
Edycja: wygląda na to, że używa JNI do wywołania implementacji C++ xxHash, ale narzut JNI jest niezauważalne, więc problemy z wydajnością pozostają.
Jednak, biorąc pod uwagę, że Scala includes a MurmurHash function, i że Java zawiera szybszy domyślny skrót (około 2x), który jest sorto-rozsądnie dystrybuowany czasami, można się zastanawiać, czy to naprawdę konieczne. Na przykład: scala.util.hashing.MurmurHash3
jest mniej więcej tak szybkie, jak tworzenie ciągów z tablicy bajtów i jest dwa razy szybsze, jeśli dasz mu tablicę bajtów.
Czego sprawdzonych do tej pory? Szybkie wyszukiwanie ujawnia to: https://github.com/jpountz/lz4-java –
Cóż ... Jeśli potrzebujesz czegoś podobnego do MurmerHash, ale szybciej, możesz spojrzeć na CityHash. CityHash jest około 2x szybszy, ale uważaj, że jest pod aktywną rafinacją i nie jest jeszcze zalecany do użytku produkcyjnego. Szmer jest wystarczająco szybki i ponieważ jest używany w wielu popularnych projektach, ma wydajne i dopracowane implementacje w różnych językach, więc co jest nie tak z pozostaniem w MurmurHash na teraz? –
@MarkoTopolnik Tak ... Pytanie OP nie oznacza dużego wysiłku, ale 'lz4-java' jest implementacją' lz4', która jest algorytmem "kompresji", a nie 'Hashingiem '. –