计算hashCode通用计算公式
1.java计算公式
@Override
public int hashCode() {
//设置初始值
int result = ; //假设有效域为: name,age,idCardNo,incomeAnnual,sex,brithDay
int c = ;
//计算name (String为对象类型,他的计算直接调用本身的hashCode)
c = name.hashCode();
result = result * + c; //计算age (int/byte/char/short类型,他的计算直接调用本身的值)
c = this.getAge();
result = result * + c; //计算idCardNo (long类型,他的计算 (int)(field^(field >>> 32)) 无符号右移32位)
c = (int) (this.idCardNo ^ (this.idCardNo >>> ));
result = result * + c; //计算 incomeAnnual (double类型,他的计算 Double.doubleToLongBits(field)后,再按Long类型计算 )
//(float类型,他的计算 Float.floatToIntBits(field) )
long tmp = Double.doubleToLongBits(this.incomeAnnual);
c = (int) (tmp ^ (tmp >>> ));
result = result * + c; //计算 sex (sex为boolean类型,他的计算直接调用 c=sex?1:0)
c = this.isSex() ? : ;
result = result * + c; //计算 brithDay (brithDay为Date对象类型,他的计算直接调用 本身的hashCode)
c = this.getBirthDay().hashCode();
result = result * + c; return result;
}
2. .net计算公式
public class HashCodeTest
{
public static void Excute()
{
var man = new Man()
{
Age = ,
BirthDay = new DateTime(,,),
IdCardNo = ,
IncomeAnnual = 10000000.5,
Name = "Aven",
Sex = true
};
var hasCode = man.GetHashCode();
Console.WriteLine(hasCode);
}
} class Man
{
public long IdCardNo { get; set; }
public int Age { get; set; }
public string Name { get; set; }
public double IncomeAnnual { get; set; }
public bool Sex { get; set; }
public DateTime BirthDay { get; set; } public override int GetHashCode()
{
//设置初始值
int result = ; //假设有效域为: name,age,idCardNo,incomeAnnual,sex,brithDay
int c = ;
//计算name (String为对象类型,他的计算直接调用本身的hashCode)
c = Name.GetHashCode();
result = result * + c; //计算age (int/byte/char/short类型,他的计算直接调用本身的值)
c = this.Age;
result = result * + c; //计算idCardNo (long类型,他的计算 (int)(field^(field >> 32)) 有符号右移32位,符号位不移动)
c = (int)(this.IdCardNo ^ (this.IdCardNo >> ));
result = result * + c; //计算 incomeAnnual (double类型,他的计算 BitConverter.DoubleToInt64Bits(field)后,再按Long类型计算 )
//(float类型,他的计算 BitConverter.ToInt32(BitConverter.GetBytes(this.IncomeAnnual),0) )
long tmp = BitConverter.DoubleToInt64Bits(this.IncomeAnnual);
c = (int)(tmp ^ (tmp >> ));
result = result * + c; //计算 sex (sex为boolean类型,他的计算直接调用 c=sex?1:0)
c = this.Sex ? : ;
result = result * + c; //计算 brithDay (brithDay为Date对象类型,他的计算直接调用 本身的hashCode)
c = this.BirthDay.GetHashCode();
result = result * + c; return result;
}
}
计算hashCode通用计算公式的更多相关文章
- 计算hashCode的常见方法
把某个非零常数值,比如说17,保存在一个叫result的int类型的变量中. 2.对于对象中每一个关键域f(值equals方法中考虑的每一个域),完成以下步骤: a.为该域计算int类型的散列吗c: ...
- 关于hashMap中 计算hashCode的逻辑推理(二)
hashMap中,为了使元素在数组中尽量均匀的分布,所以使用取模的算法来决定元素的位置.如下: //方法一: static final int hash(Object key){//jdk1.8 in ...
- js计算hashcode
String.prototype.hashCode = function(){ var hash = 0; for (var i = 0; i < this.length; i++) { var ...
- C#中另类自定义公式计算 字符串转换为计算公式,并得出计算结果
[csharp] view plain copy print? //方法一 利用DataTable中的Compute方法 例如:1*2-(4/1)+2*4=6 , , , ); DataTable d ...
- Android 时间计算工具 通用类TimeUtil
1.整体分析 1.1.源代码如下,可以直接Copy. public class TimeUtil { private static final String TAG = "TimeUtil& ...
- Java入门系列之hashCode和equals(十二)
前言 前面两节内容我们详细讲解了Hashtable算法和源码分析,针对散列函数始终逃脱不掉hashCode的计算,本节我们将详细分析hashCode和equals,同时您将会看到本节内容是从<E ...
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- c语言详解 蔡勒(Zeller)公式计算某一天是星期几 极其方便
—— 蔡勒(Zeller)公式 ,小于等于14,即在蔡勒公式中,某年的1.2月要看作上一年的13.14月来计算,比如2003年1月1日要看作2002年的13月1日来计算):d:日:[ ]代表取整,即只 ...
- hashCode花式卖萌
声明:这篇博文纯属是最近看源码时闲着没事瞎折腾(好奇心驱动),对实际的应用程序编码我觉得可能没有那么大的帮助,各位亲就当是代码写累了放松放松心情,视为偏门小故事看一看就可以了,别深究. 一.从Obje ...
随机推荐
- 19、SOAP安装,运用与比对结果解释
转载:http://www.dengfeilong.com/post/Soap2.html https://blog.csdn.net/zhu_si_tao/article/details/71108 ...
- p2148 [SDOI2009]E&D
传送门 分析 https://www.luogu.org/blog/flashblog/solution-p2148 代码 #include<bits/stdc++.h> using na ...
- 7.python实现高效端口扫描器之nmap模块
对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...
- QT开发环境
代码实现界面和槽 代码实现界面和槽 在上述工程的dialog.h中添加如下加黑代码: 加入头文件: #include <QLabel> #include <QLineEdit> ...
- Training Very Deep Networks
Rupesh Kumar SrivastavaKlaus Greff ̈J urgenSchmidhuberThe Swiss AI Lab IDSIA / USI / SUPSI{rupesh, k ...
- TypedValue.applyDimension的使用
TypedValue.applyDimension是一个将各种单位的值转换为像素的方法 用法TypedValue.applyDimension(int unit, float value,Displa ...
- C# return、continue、break
return 终止当前进程 可用循环判断,验证,等功能 if (ew == v) { PublicControlLib.Class.PublicProperties.ShowSuccess(); re ...
- DOM--sql server
public List<LianHeData> select(int ID) { List<LianHeData> list = new List<LianHeData& ...
- thedao
TheDao 简化版解释 the Dao 合约 contract f1{ function transfer() { if (acccount[m]>=100) { m.send(100) ac ...
- servlet-mysql实现简单用户登录注册
环境:IDEA Maven 效果截图: 项目结构: 类说明: ConnectionUtil:负责数据库连接和释放 UserDao:数据库增删改查操作 User:用户Bean,只用注册和登录的话可以不要 ...