![]() |
1
88
因为Java8你可以使用
对于旧版本的Java,可以使用以下命令:
注意,这个解决方案为堆栈创建了一个新对象,而第一个没有(尽管Java很可能优化了对象的创建) 查看文档时,两种方法都使用以下算法:
这些都是不错的解决方案,因为它们利用了Java库——总是更好地利用已经测试过的东西。 |
![]() |
2
9
如果你不使用 Guava 已经有了,但是番石榴可以 do this for you 很好地:
这就相当于
这个
|
![]() |
3
5
你已经明白了
上述表达式:
|
![]() |
4
3
Java 8添加 Long.hashCode(long) 去JDK。
下面的代码可以产生更高的性能。此代码将计算减少到32位
正如在其他答案中所指出的,这是 祝你愉快 avalanche effect 因此可能导致碰撞。可以使用加密散列函数来确保高雪崩效应。不过,还有其他算法,如 Murmur Hash information )它有很好的雪崩效果,但不会占用太多的CPU时间。 |
![]() |
5
1
将更均匀地分布,因为如果长值的高位发生变化,模将不会返回不同的值。 |
![]() |
6
1
我举的例子是这样一个点类:
所以
有2^20(1024*1024)种可能的组合。但是hashCode在做什么呢?
birthday problem . 设p(n)为n值时至少发生一次碰撞的概率。我们知道p(1025+)=1,因为只有1024个值。
只有38件,可能有碰撞。有148件物品,有99.999%的几率(至少一件)发生碰撞。有148件物品,每件物品与另一件物品碰撞的几率为7%。通过适当的散列函数,获取域的知识,这些数字很容易降到0。
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |