如何解决如何从Java中的另一个类访问HashTable的当前大小
我正在做一个作业,我应该为一个名为 Book 的类实现我自己的哈希码和 equals 函数。哈希表有自己的抽象类,称为 ProbingHashTable(还有其他类用于实现不同类型的探测,这些类扩展了 ProbingHashTable 类,用于分配的另一部分)。
如果可能,我想在哈希码函数中包含 key % tableSize
(除其他外)。 ProbingHashTable 有一个 size() 函数,但是如果哈希表被重新散列等,大小当然会改变。是否有可能以某种方式从 Book 类访问表的当前大小?
解决方法
有点不清楚您想要什么,但似乎您想根据与正在调用的对象 hashCode
无关的某些状态来更改在 hashCode
中返回的内容。
这很难做到,更重要的是,几乎可以肯定会破坏 the contract of hashCode
。如果您查看该文档,hashCode
的第一个要求是:
在 Java 应用程序执行期间,只要在同一个对象上多次调用它,hashCode 方法必须始终返回相同的整数,前提是没有修改对象上的 equals 比较中使用的信息
这意味着您的 hashCode
方法不得考虑 equals
方法中未考虑的任何数据。而且由于“与此对象几乎无关的地图大小”不应该在您的 equals
方法中使用,因此绝对不应该在您的 hashCode
方法中使用{1}}。
您可以在您的 Book
类中持有对地图的引用,并在 hashCode
方法中查询当前大小,但这势必会导致大量问题,并没有真正对您有任何好处。
话虽如此:您描述的计算(如 key % tableSize
)通常在地图实现之后完成,hashCode
方法被调用.
换句话说:如果 map 实现(或任何获取和使用 hashCode
结果的人)进一步操纵返回值以满足其要求,那就完全没问题了。这就是您可能应该努力的方向。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。