Warum sind XOR oft in java hashCode() aber ein anderer bitweisen Operatoren werden nur selten verwendet?
Sehe ich oft code wie
int hashCode(){
return a^b;
}
Warum XOR?
- Möglich Duplizieren --> stackoverflow.com/questions/1379952/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle bit-Operationen XOR hat den besten bit-mischen Eigenschaften.
Diese Wahrheit-Tabelle erklärt, warum:
Wie man sehen kann, für UND und ODER machen einen schlechten job bei Misch-bits.
ODER wird im Durchschnitt produzieren eine 3/4-bits. UND auf der anderen Seite produzieren im Durchschnitt 3/4 null-bits. Nur XOR hat selbst ein-bit-vs. null-bit-Verteilung. Das macht es so wertvoll für die hash-code-Generierung.
Daran erinnern, dass für einen hash-code, den Sie verwenden möchten, wie viel Informationen der Schlüssel wie möglich zu erhalten und eine gute Verteilung der hash-Werte. Wenn Sie mit UND oder ODER du wirst zahlen, die sind voreingenommen gegenüber entweder zahlen mit vielen Nullen oder zahlen mit vielen Einsen.
XOR hat die folgenden Vorteile:
Mehr info hier.
XOR-operator ist reversibel, d.h. angenommen, ich habe ein bit-string als
0 0 1
und ich XOR mit einem anderen bit-string1 1 1
, die die AusgabeNun kann ich wieder xor der 1. Zeichenfolge mit dem Ergebnis, um die 2. saite. also
So, dass der 2. Zeichenkette mit einem Schlüssel. Dieses Verhalten ist nicht gefunden mit anderen bit-operator
Sehen Sie sich bitte für mehr Infos --> Warum ist die XOR-Operation verwendet, die auf der Kryptographie?
Es ist ein anderer Anwendungsfall: Objekte, die , in denen (einige) Felder verglichen werden müssen, ohne in Bezug auf Ihre Bestellung. Zum Beispiel, wenn Sie wollen, ein paar
(a, b)
werden immer gleich die paar(b, a)
.XOR hat die Eigenschaft, dass
a ^ b
=b ^ a
, so kann es verwendet werden in hash-Funktion in solchen Fällen.Beispiele: (vollständiger code hier)
definition:
Verwendung: