diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index fdd560243f44292def0abf20cc4bf354d88eca68..65542028243e3d4418284a1f1c8ec4c8ffa8cc67 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; + } /**