how to write a HashCode()_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > how to write a HashCode()

how to write a HashCode()

 2012/3/17 15:26:37  wolfcame  程序员俱乐部  我要评论(0)
  • 摘要:/****/packagecn.fsf.annotation;/***thisclassshowsthathowtowriteaproperhashCode()**@authorFSF**/publicclassHashCodeExample{privatebooleanaBoolean=true;privatebyteaByte=1;privatecharaChar='d';privateintaInt=10;privatelongaLong=30;privatefloataFloat=89
  • 标签:has Hash
/**
 * 
 */
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());
	}
}

发表评论
用户名: 匿名