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