学做网站好做吗,网站建设的seo策略,优化文章对网站的重要性,如何利用服务器做网站1.key转换成hash
表示无符号的右移#xff1a;按照二进制把数字右移指定数位#xff0c;高位直接补零#xff0c;低位移除。
^#xff08;按位异或运算#xff09;#xff1a;运算规则#xff1a;相同的二进制数位上#xff0c;数字相同#xff0c;结果…1.key转换成hash
表示无符号的右移按照二进制把数字右移指定数位高位直接补零低位移除。
^按位异或运算运算规则相同的二进制数位上数字相同结果为0不同为1。
高16 bit 不变低16 bit 和高16 bit 做了一个异或得到的 hashcode 转化为32位二进制前16位和后16位低16 bit和高16 bit做了一个异或
public class HashMapK,V extends AbstractMapK,Vimplements MapK,V, Cloneable, Serializable {static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hashCode()) ^ (h 16);}
}2.hash转换成i
数组长度是2的k次方
hash (length-1)运算等价于对 length 取模也就是hash%length但是比%具有更高的效率。hash (length-1) hash%length。
i hash (table.length - 1)
3.总结
数组长度是2的n次幂这样hash (length-1) hash%length比%具有更高的效率当我们根据key的hash确定其在数组的位置时如果n为2的幂次方可以保证数据的均匀插入如果n不是2的幂次方可能数组的一些位置永远不会插入数据浪费数组的空间加大hash冲突。求key的hash的时候前16位和后16位低16 bit和高16 bit做了一个异或这样可以尽量减少hash冲突