|
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。
|
|
|
AlwaysneedsHelp · 如何减少此处使用的内存量? 2 年前 |
|
|
snake123 · 滚动到不同页面的锚点,URL中没有# 2 年前 |
|
|
Jan · 密码salt是否应存储在数据库中 2 年前 |
|
|
birb · RFC-6238 TOTP实现与示例不匹配 2 年前 |
|
|
AishaWho · 请解释res=id^(id>>>32) 3 年前 |
|
|
landings · 如何散列整数的环形缓冲区? 3 年前 |