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

Java中通用对象的HashCode

秦永望
2023-03-14
问题内容

我了解hashCode的思想以及为什么需要它。但是我对如何为通用对象计算hashCode感到困惑。所以这是我的问题。如果我有一个String,我可能会使用以下函数来计算hashCode,

int hash = 7;
for (int i = 0; i < strlen; i++) {
    hash = hash*31 + charAt(i);
}

但是说我有以下目的,

class Node<K, V> {

        private K key;
        private V value;
        private Node<K, V> next;
}

我的IDE为此生成了一个自动的hashCode函数,

@Override
public int hashCode() {
      int result = key != null ? key.hashCode() : 0;
      result = 31 * result + (value != null ? value.hashCode() : 0);
      result = 31 * result + (next != null ? next.hashCode() : 0);
      return result;
}

我的问题是,由于键和值是通用的,该怎么key.hashCode()办?这种方法如何运作?


问题答案:

KV参数化类型的的Node对象。

这样,hashCode将在实际类型上被调用。

例如,a Node<String, Integer>将分别具有String#hashCodeInteger#hashCode被调用。

如果使用自定义对象对其进行参数化hashCodehashCode则将调用其自己的实现或父对象的实现,直到Object#hashCode,这是一个本机(即与平台相关的)实现。



 类似资料:
  • 我有课 在另一个类中,我从第一个类中获得了一个对象数组 现在我想写一个在第二个数组中查找名称的方法,并为该数组中第一个对象的实例分配一个新值 但我没有得到这个工作。我需要写点什么吗?在set()方法中? 谢谢=)

  • 问题内容: 是否可以通过Java通过引用传递对象 就像在C#中一样 问题答案: 不,这在Java中是不可能的。 在Java中,方法的所有参数均按值传递。注意非原始型的的变量,它们是对对象的引用,也由值来传递:在这种情况下, 参考 是 由值来传递 。请注意,按值传递引用与按引用传递不同。

  • 问题内容: 我对JNI相对较新,并且掌握了使用JNI处理Java对象中的整数和数组的基本知识。现在,我正在尝试修改/访问Java对象中的Java对象。 我一直在互联网和Stack Overflow上进行搜索,但还没有找到执行该操作的方法。 这是例子。 在Java中: 在JNI中,如何通过ObjectTwo从ObjectOne访问“ buff”?我尝试过这样的事情… 我做错了什么吗? 问题答案: 在

  • 问题内容: 我正在自学Java,这本书中的其中一项复习练习要求“对象”和“对象变量”之间的区别。 我知道什么是对象(类的特定实例),但是我似乎无法在书中的任何地方(无答案部分)或在互联网上找到术语“对象变量”。 有人知道这个名词的意思吗? 问题答案: 它是“实例变量”的同义词: 显然,该术语并不常用,最好坚持使用“实例变量”以避免任何潜在的歧义。

  • 问题内容: 我有2个java netbeans项目,一个是Server,另一个是Client。我已经创建了一个Message类,该类要传递给服务器,并在服务器上进行修改后以另一种方式返回给客户端。我在两个项目中都包含了Message类。我使用和传递对象。服务器和客户端之间的连接正常,并且对象通过,但在服务器上,当我从using 方法读取对象时,将其类型转换为类。但是在服务器上抛出 ClassNot

  • 问题内容: 基于此问题 递增变量名称? 我有一个数组列表“ peopleHolder”,其中包含各种“人”对象。我想基于for循环自动创建“人”对象。我做了以下 我想从人员类中调用方法。例如person.setAge; 如何通过arraylist调用此类方法?我想为每个对象设置值的方法。 问题答案: 如果要在列表中的所有对象上调用某种方法,则需要首先对其进行迭代,然后在每个元素中调用方法。可以说您