Poprosiłem o metodę similar question dla metody string.GetHashCode()
w .NET. Od tego momentu dowiedziałem się, że nie możemy polegać na niejawnej implementacji kodu skrótu dla typów wbudowanych, jeśli mamy go używać na różnych maszynach. Dlatego zakładam, że implementacja Javy String.hashCode()
jest również niestabilna w różnych konfiguracjach sprzętowych i może zachowywać się inaczej w maszynach wirtualnych (nie zapomnij o różnych implementacjach maszyn wirtualnych).Stabilność Java i string.hashCode() na komputerach w klastrze
Obecnie omawiamy sposób bezpiecznego przekształcenia ciągu w liczba w Javie, przez mieszanie, ale algorytm mieszania musi być stabilny w różnych węzłach klastra i powinien być szybki do oceny, ponieważ wystąpi wysoka częstotliwość użycia. Moi koledzy z drużyny nalegają na natywną metodę hashCode
i potrzebuję pewnych rozsądnych argumentów, aby zmusić ich do ponownego rozważenia innego podejścia. Obecnie mogę myśleć tylko o różnicach między konfiguracjami maszyn (x86 i x64), ewentualnie różnymi dostawcami JVM na niektórych maszynach (prawie nie ma to zastosowania w naszym przypadku) i różnicami w kolejności bajtów, w zależności od maszyny, której algorytm jest używany. biegać. Oczywiście, należy również rozważyć kodowanie znaków.
Podczas gdy wszystkie te rzeczy przychodzą mi do głowy, nie jestem w 100% pewny, czy któryś z nich jest wystarczająco mocny, i byłbym wdzięczny za fachowość i doświadczenie w tej dziedzinie. Pomoże mi to zbudować mocniejsze argumenty na rzecz pisania niestandardowego algorytmu mieszania. Ponadto, doceniłbym porady dotyczące tego, co nie robić podczas implementacji.
Kod hashcode jest dobrze zdefiniowany i taki sam na dowolnej platformie Java. – ZhongYu
http://stackoverflow.com/questions/785091/consistency-of-hashcode-on-a-java-string – zch
@ zhong.j.yu zakładasz [JRockit] (http://www.oracle.com /technetwork/middleware/jrockit/overview/index.html) i [IBM JVM] (http://publib.boulder.ibm.com/infocenter/java7sdk/v7r0/index.jsp? topic =% 2Fcom.ibm.java.lnx.70.doc% 2Fuser% 2Fjava_jvm.html) mają tę samą implementację dla 'String # hashCode'. –