当前位置: 首页 > 知识库问答 >
问题:

我们是否可以像Java中的ArrayList那样重写非哈希集合中的hashCode and equals方法?

毕黎昕
2023-03-14

我理解了重写equals()方法和hashCode()方法的目的。但我的问题是,我们能在像ArrayList这样的非哈希集合中重写hashcode and equals吗?

共有1个答案

暨鹭洋
2023-03-14

方法equals()hashcode()是在object(Java中所有内容的父级)中声明的,所以从技术上讲,可以从任何类重写它们。

至于做这件事的“感觉”,那取决于你。

为什么通常要覆盖它们?因为您希望在哈希实现(例如hashmap)中以相同的方式对技术上是两个不同实例但功能上是相同实例的两个对象进行哈希。

public class Id {
    private final String id;
    public Id(String id) {
        this.id = id;
    }
}
Id id1 = new Id("1");
Id id2 = new Id("1");
id1.equals(id2); //<-- false

另请注意,ArrayList不是一个可修改的类,因此即使需要,也不能更改equals()hashcode()的实现。不过,您可以做的是将该列表包装在您的类中,然后根据您的意愿实现这些方法

 类似资料:
  • 我正在做一个项目,所有的团队成员都在使用Eclipse,而我是唯一的IDEA用户。这造成了大量进口重新安排的噪音。eclipse导入的顺序是:Java、Javax、Org、Com,按字母顺序排列。是否可以配置IDEA来遵循这些规则?

  • 问题内容: 我们可以重载Java中的方法吗? 问题答案: 您 可以 重载该方法,但仅在JVM启动您的类时使用。例如: 从命令行运行时,即使指定一个或两个命令行参数,该命令也 始终会 打印。 当然,您可以从代码中自己调用该方法-此时将应用常规的重载规则。 编辑:请注意,您可以使用varargs签名,因为从JVM的角度来看,这是等效的:

  • 问题内容: 我需要使用HMAC SHA256生成哈希。我在Java中使用以下代码。我需要在Objective-C中使用等效的代码。 键= 值= 输出= 我有这个Objective-C功能: 我得到的输出是这样的: 我尝试删除base64编码,但是没有用。 任何建议都是最欢迎的。 问题答案: 您需要修复Java hmac打印机,因为它无效。里面的所有内容都有一个赠品,您要先将字节符号扩展为32位带符

  • 我希望有一个将字符串映射到类的哈希表。我尝试了类似的方法,但在所在的位置得到了“Expression expected”。 然后我希望能够做一些类似的事情

  • 行动时间 - 哈希我们的密码 我们将在此部分中使用更安全的哈希密码AVP替换用户文件中的Cleartext-Password AVP。 关于如何创建和呈现散列密码似乎存在一般性的混淆。 我们将帮助您澄清此问题,以便为每种格式生成工作哈希值。 OpenLDAP常见问题解答是帮助我们处理哈希值的有价值的URL: http://www.openldap.org/faq/data/cache/419.ht

  • 问题内容: 我需要一个像STL多集一样工作的数据结构,但是Java中的TreeSet不允许重复的元素。Java中是否有等效于多集的内置数据结构? 问题答案: 标准Java库中没有Multiset。您应该使用包含Multiset类的Google Guava框架。 看到