`
wolfcame
  • 浏览: 78295 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

how to write a HashCode()

    博客分类:
  • J2SE
阅读更多
/**
 * 
 */
package cn.fsf.annotation;

/**
 * this class shows that how to write a proper hashCode()
 * 
 * @author FSF
 * 
 */
public class HashCodeExample {
	private boolean aBoolean = true;
	private byte aByte = 1;
	private char aChar = 'd';
	private int aInt = 10;
	private long aLong = 30;
	private float aFloat = 89;
	private double aDouble = 90.34;
	private String aStr = "test";
	private String[] aArray = { "df", "cs" };

	@Override
	public int hashCode() {
		int lResult = 17;
		// first step,collect all usefull fields hashCode in a proper way,
		// the principle is that the code must generate fast and simple
		int lBooleanCode = aBoolean ? 1 : 0;
		int lByteCode = aByte;
		int lCharCode = aChar;
		int lIntCode = aInt;
		int lLongCode = (int) (aLong ^ (aLong >>> 32));
		int lFloatCode = Float.floatToIntBits(aFloat);
		long lDoubleCodeTemp = Double.doubleToLongBits(aDouble);
		int lDoubleCode = (int) (lDoubleCodeTemp ^ (lDoubleCodeTemp >>> 32));
		int lStrCode = aStr.hashCode();
		int lArrayCode = 0;
		if (aArray != null && aArray.length > 0) {
			for (int i = 0; i < aArray.length; i++) {
				lArrayCode += aArray[i].hashCode();
			}
		}
		// get the sum of them
		int lSumCode = lBooleanCode + lByteCode + lCharCode + lIntCode
				+ lLongCode + lFloatCode + lDoubleCode + lStrCode + lArrayCode;
		// generate the hashCode
		lResult = 31 * lResult + lSumCode;
		return lResult;
	}

	public static void main(String[] args) {
		HashCodeExample lExample = new HashCodeExample();
		System.out.println(lExample.hashCode());
	}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics