| java.lang.Object org.mmbase.util.HashCodeUtil
HashCodeUtil | final public class HashCodeUtil (Code) | | 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. Not 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 |
Method Summary | |
final public static int | hashCode(int source, boolean x) | final public static int | hashCode(int source, int x) | final public static int | hashCode(int source, long x) | final public static int | hashCode(int source, float x) | final public static int | hashCode(int source, double x) | final public static int | hashCode(int source, Object x) | final public static int | hashCode(int source, boolean[] x) | final public static int | hashCode(int source, int[] x) | final public static int | hashCode(int source, long[] x) | final public static int | hashCode(int source, float[] x) | final public static int | hashCode(int source, double[] x) | final public static int | hashCode(int source, Object[] x) | final public static int | hashCodeGentle(int source, Object[] x) | final public static int | hashCodeGentle2(int source, Object[] x) |
hashCode | final public static int hashCode(int source, boolean x)(Code) | | |
hashCode | final public static int hashCode(int source, int x)(Code) | | |
hashCode | final public static int hashCode(int source, long x)(Code) | | |
hashCode | final public static int hashCode(int source, float x)(Code) | | |
hashCode | final public static int hashCode(int source, double x)(Code) | | |
hashCode | final public static int hashCode(int source, Object x)(Code) | | |
hashCode | final public static int hashCode(int source, boolean[] x)(Code) | | |
hashCode | final public static int hashCode(int source, int[] x)(Code) | | |
hashCode | final public static int hashCode(int source, long[] x)(Code) | | |
hashCode | final public static int hashCode(int source, float[] x)(Code) | | |
hashCode | final public static int hashCode(int source, double[] x)(Code) | | |
hashCode | final public static int hashCode(int source, Object[] x)(Code) | | |
hashCodeGentle | final public static int hashCodeGentle(int source, Object[] x)(Code) | | |
hashCodeGentle2 | final public static int hashCodeGentle2(int source, Object[] x)(Code) | | |
|
|