【问题标题】:How to access current size of HashTable from another class in Java如何从Java中的另一个类访问HashTable的当前大小
【发布时间】:2021-05-13 08:35:11
【问题描述】:

我正在执行一项任务,我应该为一个名为 Book 的类实现我自己的哈希码和 equals 函数。哈希表有自己的抽象类,称为 ProbingHashTable(还有其他类用于实现不同类型的探测,扩展 ProbingHashTable 类,用于分配的另一部分)。

如果可能,我想在哈希码函数中包含key % tableSize(除其他外)。 ProbingHashTable 有一个 size() 函数,但是如果哈希表被重新散列等,大小当然会改变。是否可以从 Book 类中以某种方式访问​​表的当前大小?

【问题讨论】:

    标签: java size hashtable hashcode


    【解决方案1】:

    有点不清楚您想要什么,但您似乎想根据与正在调用的对象 hashCode 无关的某些状态更改您在 hashCode 中返回的内容。

    这很棘手,更重要的是,几乎肯定会破坏the contract of hashCode。如果您检查该文档,hashCode 的第一个要求是:

    只要在 Java 应用程序执行期间对同一个对象多次调用,hashCode 方法必须始终返回相同的整数,前提是没有修改对象上的 equals 比较中使用的信息

    这意味着您的hashCode 方法不得考虑equals 方法中未考虑的任何数据。并且由于“与该对象几乎无关的地图的大小”不应该在您的 equals 方法中使用它绝对不应该在您的 hashCode 中使用.

    可以在您的 Book 类中保存对地图的引用,并在 hashCode 方法中查询当前大小,但这肯定会导致很多问题而不是真正的问题为你做任何好事。

    话虽如此:您描述的计算(如key % tableSize)通常是在地图实现 调用hashCode方法之后完成的。

    换句话说:如果 map 实现(或任何获得和使用hashCode 结果的人)进一步操纵返回值以满足其要求,那是完全没问题的。这就是你可能应该努力的方向。

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2017-08-18
      • 1970-01-01
      相关资源
      最近更新 更多