当前位置: 首页 > 面试题库 >

将Java哈希码合并为“主”哈希码

乐正玺
2023-03-14
问题内容

我有一个实现了hashCode()的向量类。它不是我写的,而是使用2个质数对2个向量分量进行异或运算。这里是:

    /*class Vector2f*/
...
    public int hashCode()
    {
        return 997 * ((int)x) ^ 991 * ((int)y); //large primes! 
    }

…因为这是来自已建立的Java库,所以我知道它可以正常工作。

然后,我有一个Boundary类,其中包含2个向量:“开始”和“结束”(代表直线的端点)。这两个向量的值是边界的特征。

    /*class Boundary*/
...
    public int hashCode()
    {
        return 1013 * (start.hashCode()) ^ 1009 * (end.hashCode());
    }

在这里,我尝试为构成该边界的向量的唯一2元组(起点和终点)创建一个良好的hashCode()。我的问题:这个hashCode()实现会起作用吗?

(请注意,我在后面的hashCode()实现中使用了2个不同的质数;我不知道这是否有必要,但是我想避免共同因素时最好还是后悔,因为我想这是因为为什么素数在哈希函数中很受欢迎。)


问题答案:

这是正常的做法。在我看来,这很合理。如果您使用的是Eclipse,则应该会发现它可以为您生成equalshashCode为您生成-只需检查
Source 菜单即可。它将执行相同的操作-枚举您的字段并创建一个equals检查所有字段的方法,然后选择 n个
质数并完成创建hashCode方法。



 类似资料:
  • 常见问题,Int Raku,如何合并,合并两个哈希? 说: 如何获取

  • 所以,我有一个带有数组的哈希,就像这样: 我想将它们合并到一个哈希数组中,组合相应的元素。 结果应该是这样的: 知道如何有效地做到这一点吗? 请注意,真实世界的使用场景可能包含数量可变的散列键。

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 2(名)-约翰 3(型号)-客车 4(attr_hash)-由java哈希代码计算

  • 我刚刚讨论了散列码的概念,遇到了一行:

  • 哈希是键/值对 如果你想按名字查询,那么需要哈希。哈希的键必须唯一,但值可以是任意标量。 有时候你仍然会看到人们称它为“关联数组”,但不要想当然的把它作为数组。 通过键/值对列表来创建哈希 使用键/值对列表创建哈希: my %stooges = ( 'Moe', 'Howard', 'Larry', 'Fine', 'Curly', 'Howard', 'Iggy'