Here you can find the source of hash(boolean value, int seed)
Parameter | Description |
---|---|
value | The value whose hash code to compute. |
seed | The hash code value computed so far. If this method is invoked for the first field, then any arbitrary value (preferrably different for each class) is okay. |
public static int hash(boolean value, int seed)
//package com.java2s; /*/*w w w .j a v a 2s . co m*/ * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2001-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ public class Main { /** * A prime number used for hash code computation. */ private static final int PRIME_NUMBER = 37; /** * Alters the given seed with the hash code value computed from the given value. * * @param value The value whose hash code to compute. * @param seed The hash code value computed so far. If this method is invoked for the first * field, then any arbitrary value (preferrably different for each class) is okay. * @return An updated hash code value. */ public static int hash(boolean value, int seed) { // Use the same values than Boolean.hashCode() return seed * PRIME_NUMBER + (value ? 1231 : 1237); } /** * Alters the given seed with the hash code value computed from the given value. * * @param value The value whose hash code to compute. * @param seed The hash code value computed so far. If this method is invoked for the first * field, then any arbitrary value (preferably different for each class) is okay. * @return An updated hash code value. */ public static int hash(char value, int seed) { return seed * PRIME_NUMBER + (int) value; } /** * Alters the given seed with the hash code value computed from the given value. * {@code byte} and {@code short} primitive types are handled by this method as * well through implicit widening conversion. * * @param value The value whose hash code to compute. * @param seed The hash code value computed so far. If this method is invoked for the first * field, then any arbitrary value (preferably different for each class) is okay. * @return An updated hash code value. */ public static int hash(int value, int seed) { return seed * PRIME_NUMBER + value; } /** * Alters the given seed with the hash code value computed from the given value. * {@code byte} and {@code short} primitive types are handled by this method as * well through implicit widening conversion. * * @param value The value whose hash code to compute. * @param seed The hash code value computed so far. If this method is invoked for the first * field, then any arbitrary value (preferably different for each class) is okay. * @return An updated hash code value. */ public static int hash(long value, int seed) { return seed * PRIME_NUMBER + (((int) value) ^ ((int) (value >>> 32))); } /** * Alters the given seed with the hash code value computed from the given value. * * @param value The value whose hash code to compute. * @param seed The hash code value computed so far. If this method is invoked for the first * field, then any arbitrary value (preferably different for each class) is okay. * @return An updated hash code value. */ public static int hash(float value, int seed) { return seed * PRIME_NUMBER + Float.floatToIntBits(value); } /** * Alters the given seed with the hash code value computed from the given value. * * @param value The value whose hash code to compute. * @param seed The hash code value computed so far. If this method is invoked for the first * field, then any arbitrary value (preferably different for each class) is okay. * @return An updated hash code value. */ public static int hash(double value, int seed) { return hash(Double.doubleToLongBits(value), seed); } /** * Alters the given seed with the hash code value computed from the given value. The givan * object may be null. This method do <strong>not</strong> iterates recursively in array * elements. If array needs to be hashed, use one of {@link Arrays} method or * {@link #deepHashCode deepHashCode} instead. * <p> * <b>Note on assertions:</b> There is no way to ensure at compile time that this method * is not invoked with an array argument, while doing so would usually be a program error. * Performing a systematic argument check would impose a useless overhead for correctly * implemented {@link Object#hashCode} methods. As a compromise we perform this check at * runtime only if assertions are enabled. Using assertions for argument check in a public * API is usually a deprecated practice, but we make an exception for this particular method. * * @param value The value whose hash code to compute, or {@code null}. * @param seed The hash code value computed so far. If this method is invoked for the first * field, then any arbitrary value (preferably different for each class) is okay. * @return An updated hash code value. * @throws AssertionError If assertions are enabled and the given value is an array. */ public static int hash(Object value, int seed) throws AssertionError { seed *= PRIME_NUMBER; if (value != null) { assert !value.getClass().isArray() : value; seed += value.hashCode(); } return seed; } }