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

一组三个字段的哈希码

方德宇
2023-03-14
问题内容

我有三个领域,即

  1. 1号
  2. 2号
  3. 时间

我试图在Java中编写一个函数,为上述字段返回唯一的哈希值( 长期需要是hash的返回类型
)。然后,此哈希将用于在HashSet中存储与上述字段相对应的数据库行。我是编写哈希码函数的新手,有人可以复习一下我的内容。

public class HashCode {

    private long Number1;
    private long Number2;
    String Time;

    public HashCode(long Number1, long Number2, String Time){
        this.Number1 = Number1;
        this.Number2 = Number2;
        this.Time = Time;
    }

    public long getHashCode() {
        long hash = 3;
        hash = 47 * hash + (long) (this.Number1 ^ (this.Number1 >>> 32));
        hash = 47 * hash + (long) (this.Number2 ^ (this.Number2 >>> 32));
        hash = 47 * hash + (this.Time != null ? this.Time.hashCode() : 0);
        return hash;
    }
}

问题答案:

我认为这是hashCode的特殊版本。否则,您将需要覆盖hashCode,不要定义新方法。诸如此类的容器HashSet不会获得您自己的哈希码。

  • 因此,对于for的专用版本long,您不需要使用xor(^),因为它已经很长了。只需使用该long值。
  • 当使用String的hashCode时,它不会很久,仅用于int,所以它不会“使用”您的所有空间。您可以根据需要hashCode将String的与重复long
  • 其他看起来不错。

(顺便说一句,成员应以较低的字母称呼,并且也Time应该是私人的。)



 类似资料:
  • 寻找一种优雅的方式以特殊的方式合并两个散列数组: 如果名称关键字匹配,则结果必须包含< code>new_data的所有名称散列,仅包含< code>old_data的额外数据。 我的第一次尝试是这样的,但是它创建了一个额外的散列:

  • 我有一个包装类,它只有一个字段,我想覆盖包装类的GetHashCode方法。 我曾在有多个字段的情况下编写过哈希代码算法(即使用xor、shift和wrap等),但这是我第一次只使用单个字段。 1)包装器和它的字段应该返回相同的哈希代码吗?我最初的想法是不,我们故意设计一个生成与另一个类相同散列的类,这感觉不太对。 2)如果没有,取字段的hashcode加1就足够了吗,或者有没有更好的方法来计算新

  • 我有 2 个数组: 我希望array1元素成为新Hash中的键,array2元素成为同一个Hash中相应的值。有人能建议一下怎么做吗? 谢谢

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

  • 问题内容: 使用Redis来创建“记录”时,可以创建具有多个字段的哈希。例如: 您可以通过了解键值来检索此值,但是我想知道有什么方法可以检索field2中所有具有“ World”的哈希值? 问题答案: Redis中没有索引,并且不实现SQL。这是一个键值存储。您提供一把钥匙,就能为您带来价值。 也就是说,您可以通过自己维护二级索引来实现此目的。例如: 创建一条记录和一个索引条目 更新记录,删除旧索

  • 问题内容: 在如何哈希列表?有人告诉我,我应该转换为一个元组第一,如到。 因此,第一个不能散列,而第二个可以散列。为什么*? *我并不是真正地在寻求详细的技术说明,而是在寻找一种直觉 问题答案: 主要是因为元组是不可变的。承担以下工作: 现在,当您这样做时会发生什么?您已修改字典中的键!远道而来!如果您熟悉哈希算法的工作原理,这会让您感到恐惧。另一方面,元组是绝对不变的。看起来好像是在修改元组,但