From 7973f2e8b9475bec932846535fc8421621fd8ab0 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Wed, 26 Aug 2009 22:17:29 +0000 Subject: [PATCH] * DataHelper: Fix byte array hashcode for small arrays --- core/java/src/net/i2p/data/DataHelper.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index fdd560243f..6554202824 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -798,12 +798,20 @@ public class DataHelper { * */ public static int hashCode(byte b[]) { + // Java 5 now has its own method, and the old way + // is horrible for arrays smaller than 32. + // otoh, for sizes >> 32, java's method may be too slow int rv = 0; if (b != null) { - for (int i = 0; i < b.length && i < 32; i++) - rv += (b[i] << i); + if (b.length <= 32) { + rv = Arrays.hashCode(b); + } else { + for (int i = 0; i < b.length && i < 32; i++) + rv ^= (b[i] << i); // xor better than + in tests + } } return rv; + } /** -- GitLab