[b]hash[/b] 也叫做“散列”,通过散列算法,变换成固定长度的输出,该输出就是散列值。计算散列函数的方法很多,例如:直接寻找址方,平均分析法,折叠法等
[b]hashcode[/b] 是散列码,是由一个对象导出的整型值,没有规律的。
对于hashcode的误解也很多主要是在值的定位上没有弄清楚,一般一个类如果不重写hashcode那么它就一定继承Object的,而Object的hashcode 每个对象得到的
一样是不一样。
[b]HashTbale,HashSet,HashMap[/b]由于他们在存储的过程中用到hash的算法所以也带了hash字样,但是他们具体的存储方式是不一样的,也就决定了他们各自的功能上也存在在着差异。
[b]HashTable[/b] HashTable中hash数组默认的大小是11,增加的方式是old*2+1 ,直接使用对象的hashCode可以得到HashTable的hash值
[b]HashMap [/b] HashMap 中hash数组的默认大小是16,增加方式跟2的指数相关,它的hash值需要重新计算,hashMap主要由key,value,entry 来决定的
[b]HashSet [/b] 的内部是使用HashMap实现的,和hashMap不同的是它不需要key和value的值由这些内部特征才会得到大家平时知道的那些不同点和相同点。
[b]hashcode[/b] 是散列码,是由一个对象导出的整型值,没有规律的。
对于hashcode的误解也很多主要是在值的定位上没有弄清楚,一般一个类如果不重写hashcode那么它就一定继承Object的,而Object的hashcode 每个对象得到的
一样是不一样。
String a="abc";
//假设一个对象,构造函数带名称和年龄2个属性,无其它任何方法。
Person m=new Person("fov","28")
StringBuffer x=new StringBuffer(a)
String b="abc";
Person n=new Person("fov","28")
StringBuffer y=new StringBuffer(b);
比较 a与b ,m与n的hashcode?
很多人都可能以为相等的,其实String 的原码里已经对hashcode进行了重写,所以它的hashcode的值是重新计算的,重新计算就跟String的内容是相关的,由于他们的内容是一样的所以a与b的hashcode是一样的,而Person与StringBuffer这个2个类没有重写hashcode而他们的hashcode算法是继承Object的hashcode所以他们是不一样的。
[b]HashTbale,HashSet,HashMap[/b]由于他们在存储的过程中用到hash的算法所以也带了hash字样,但是他们具体的存储方式是不一样的,也就决定了他们各自的功能上也存在在着差异。
[b]HashTable[/b] HashTable中hash数组默认的大小是11,增加的方式是old*2+1 ,直接使用对象的hashCode可以得到HashTable的hash值
[b]HashMap [/b] HashMap 中hash数组的默认大小是16,增加方式跟2的指数相关,它的hash值需要重新计算,hashMap主要由key,value,entry 来决定的
[b]HashSet [/b] 的内部是使用HashMap实现的,和hashMap不同的是它不需要key和value的值由这些内部特征才会得到大家平时知道的那些不同点和相同点。