org.mmbase.util
Class HashCodeUtil

java.lang.Object
  extended by org.mmbase.util.HashCodeUtil

public final class HashCodeUtil
extends Object

http://www.macchiato.com/columns/Durable6.html Hash Collections (HashSet, HashMap, Hashtable, etc) are typically implemented with an array of buckets. Each bucket is itself an array or linked list of pairs. To decide which keys go into which buckets, the array index for the bucket is produced by taking the hash value, modulo the size of the collection. That is, bucketIndex = abs(hashValue % tableSize); Within each bucket, the search for the object is sequential, and uses equals. In the ideal case, the table size is a prime number, the hash values would be evenly distributed, and each bucket would contain just one value. Lookup in that case is incredibly fast: just one call to hashCode and one call to equals. If the hash values (modulo the table size) are constant, you have the worst case; all the objects will be in one bucket, and accessing the objects will require a sequential search through every single item in the hash table, calling equals for every single item. Lookup in that case will be incredibly slooow! Requirements: synchronization with Equality If x.equals(y), then x.hashCode() == y.hashCode() That is, if two objects are equal, then their hash values are equal. Note that the reverse is not true; two objects may have the same hash value but not be equal! Basic design goals: Even Distribution An ideal implementation would return integer values that are evenly distributed over the range from zero to Integer.MAX_VALUE. That is, if I picked a million random objects, their hash values would be pretty randomly distributed over this range. In the best case, any unequal objects would have different hash values. Fast An ideal implementation would compute the hash value very quickly. After all, this method is going to be called every time an object is put into a hash-based collection, and every time you query whether an object is in a hash-based collection. Simple Since you should implement this for every object that could go into hash-based collections, you want your code to be simple to write and easy to maintain.

Since:
MMBase-1.8

Constructor Summary
HashCodeUtil()
           
 
Method Summary
static int hashCode(int source, boolean x)
           
static int hashCode(int source, boolean[] x)
           
static int hashCode(int source, double x)
           
static int hashCode(int source, double[] x)
           
static int hashCode(int source, float x)
           
static int hashCode(int source, float[] x)
           
static int hashCode(int source, int x)
           
static int hashCode(int source, int[] x)
           
static int hashCode(int source, long x)
           
static int hashCode(int source, long[] x)
           
static int hashCode(int source, Object x)
           
static int hashCode(int source, Object[] x)
           
static int hashCodeGentle(int source, Object[] x)
           
static int hashCodeGentle2(int source, Object[] x)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

HashCodeUtil

public HashCodeUtil()
Method Detail

hashCode

public static final int hashCode(int source,
                                 boolean x)

hashCode

public static final int hashCode(int source,
                                 int x)

hashCode

public static final int hashCode(int source,
                                 long x)

hashCode

public static final int hashCode(int source,
                                 float x)

hashCode

public static final int hashCode(int source,
                                 double x)

hashCode

public static final int hashCode(int source,
                                 Object x)

hashCode

public static final int hashCode(int source,
                                 boolean[] x)

hashCode

public static final int hashCode(int source,
                                 int[] x)

hashCode

public static final int hashCode(int source,
                                 long[] x)

hashCode

public static final int hashCode(int source,
                                 float[] x)

hashCode

public static final int hashCode(int source,
                                 double[] x)

hashCode

public static final int hashCode(int source,
                                 Object[] x)

hashCodeGentle

public static final int hashCodeGentle(int source,
                                       Object[] x)

hashCodeGentle2

public static final int hashCodeGentle2(int source,
                                        Object[] x)


MMBase 2.0-SNAPSHOT - null