java filter函数的用法 object转long问题( 二 )


调用该方法后当前线程进入睡眠状态,直到以下事件发生 。
其他线程调用了该对象的notify方法 。
其他线程调用了该对象的notifyAll方法 。
其他线程调用了interrupt中断该线程 。
时间间隔到了 。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常 。
hash 法简介hash 算法,又被成为散列算法
基本上,哈希算法就是将对象本身的键值,通过特定的数学函数运算或者使用其他方法,转化成相应的数据存储地址的 。
而哈希法所使用的数学函数就被称为 『哈希函数』又可以称之为散列函数 。
如果我们能在数组存放的时候就按一定的规则放入元素,在我们想找某个元素的时候在根据之前定好的规则,就可以很快的得到我们想要的结果了 。换句话说之前我们在数组中存放元素的顺序可能是依照添加顺序进行的,但是如果我们是按照一种既定的数学函数运算得到要放入元素的值,和数组角标的映射关系的话 。那么我们在想取某个值的元素的时候就使用映射关系就可以找到对应的角标了 。
在常见的 hash 函数中有一种最简单的方法交「除留余数法」,操作方法就是将要存入数据除以某个常数后,使用余数作为索引值 。
下面看个例子:将 323,458,25,340,28,969,77 使用「除留余数法」存储在长度为11的数组中 。我们假设上边说的某个常数即为数组长度11 。每个数除以11以后存放的位置如下图所示:
试想一下我们现在想要拿到 77 在数组中的位置,是不是只需要arr[77%11] = 77 就可以了 。
但是上述简单的 hash 算法,缺点也是很明显的,比如 77 和 88 对 11 取余数得到的值都是 0,但是角标为 0 位置已经存放了 77 这个数据,那88就不知道该去哪里了 。上述现象在哈希法中有个名词叫碰撞:
碰撞:若两个不同的数据经过相同哈希函数运算后,得到相同的结果,那么这种现象就做碰撞 。
如果两个对象相同,那么它们的hashCode值一定要相同;
如果两个对象的hashCode相同,它们并不一定相同(这里说的对象相同指的是用equals方法比较) 。
equals()相等的两个对象,hashCode()一定相等;equals()不相等的两个对象,却并不能证明他们的hashCode()不相等 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: