Ho chiesto similar question per il metodo string.GetHashCode()
in .NET. Tratto da allora, ho imparato che non possiamo fare affidamento sull'implementazione implicita del codice hash per i tipi di buit-in, se vogliamo usarlo su macchine diverse. Pertanto, presumo che l'implementazione Java di String.hashCode()
sia anche instabile tra diverse configurazioni hardware e possa comportarsi in modo diverso su VM (non dimenticare le diverse implementazioni VM)Stabilità Java e string.hashCode() su macchine nel cluster
Attualmente stiamo discutendo un modo per trasformare in modo sicuro una stringa in un numero in Java, mediante hashing, ma l'algoritmo hash deve essere stabile tra diversi nodi di un cluster ed essere veloce da valutare, poiché ci sarà un'alta frequenza di utilizzo. I miei compagni di squadra insistono sul metodo nativo hashCode
e avrò bisogno di alcuni argomenti ragionevoli per convincerli a riconsiderare un altro approccio. Attualmente, posso solo pensare alle differenze tra le configurazioni della macchina (x86 e x64), possibilmente diversi venditori della JVM su alcune macchine (difficilmente applicabile nel nostro caso) e differenze nell'ordine dei byte, a seconda della macchina che l'algoritmo sta correre. Naturalmente, la codifica dei caratteri è probabilmente da considerare.
Mentre tutte queste cose mi vengono in mente, non sono sicuro al 100% in nessuna di esse di essere una ragione abbastanza forte, e apprezzerei la vostra esperienza ed esperienza in questo settore. Questo mi aiuterà a costruire argomenti più forti per favorire la scrittura di un algoritmo di hashing personalizzato. Inoltre, gradirò i consigli su cosa non fare quando lo si implementa.
Il codice hash della stringa è ben definito e uguale su qualsiasi piattaforma Java. – ZhongYu
http://stackoverflow.com/questions/785091/consistency-of-hashcode-on-a-java-string – zch
@ zhong.j.yu stai assumendo [JRockit] (http://www.oracle.com /technetwork/middleware/jrockit/overview/index.html) e [IBM JVM] (http://publib.boulder.ibm.it/infocenter/java7sdk/v7r0/index.jsp? topic =% 2Fcom.ibm.java.lnx.70.doc% 2Fuser% 2Fjava_jvm.html) hanno la stessa implementazione per 'String # hashCode'. –