我正在实现一个LinkedListDeque的数据 struct .我已经编写了一个equals方法和一个帮助器:

  1. 判断对象o是否为类LinkedListDeque的实例.如果是真的,
  2. 判断o中的每个 node 是否等于this双队列中的 node .

我编写了一个帮助器,因为我需要一种方法来在2中对两个LinkedListDeque对象进行比较操作,而不是在this双队列和o object之间进行比较.当我第一次编写equals_helper方法时,我省略了类型声明中的圆括号.测试过了,不起作用.IDE建议我用圆括号将类型声明括起来(即equals_helper(LinkedListDeque o)equals_helper((LinkedListDeque) o)),that起作用了.

我试图找到一些关于我在这里做什么的文档,但我没有背景知识来知道我在寻找什么.What is this concept called, am I applying it correctly in the context of Java OOP principles, and is there a better way to do this?

public boolean equals(Object o) {
    if (!(o instanceof LinkedListDeque)) {
        return false;
    } else {
        return this.equals_helper((LinkedListDeque) o);
    }
}

public boolean equals_helper(LinkedListDeque L) {
    if (L.size() != this.size()) {
        return false;
    } else {
        Node orig_curr = sentinel.next;
        Node curr = L.sentinel.next;
        while (orig_curr.item != null || curr.item != null) {
            if (orig_curr.item == curr.item) {
                curr = curr.next;
                orig_curr = orig_curr.next;
            } else return curr.next.item == null && orig_curr.next.item == null;
        }
    }
    return true;
}

推荐答案

由于equals的参数是Object类型,因此需要将其强制转换为要使用的类型.否则,它可能是一种不同的类型.在这种情况下是LinkedListDeque.但是从Java 14开始,您可以这样做:

public boolean equals(Object o) {
    if (o instanceof LinkedListDeque lld)) {
       return this.equals_helper(lld);
    }
    return false;
}

如果instanceof返回TRUE,它会自动转换为正确的类型并放入lld中,然后可以使用.不需要显式强制转换.

注意:您应该首先判断对象是否相同.if(this == obj) return true;

当您重写等于时,重写hashCode也是一个好习惯.

Java相关问答推荐

将linkedHashMap扩展到Java中的POJO类

具有额外列的Hibert多对多关系在添加关系时返回NonUniqueHealthExcellent

Java 21虚拟线程会解决转向react 式单线程框架的主要原因吗?

空手道比赛条件

Java自定义ThreadPool—暂停任务提交并取消当前排队任务

Quarkus keycloat配置不工作.quarkus. keycloak. policy—enforcer. enable = true在. yaml表示中不工作

在Spring终结点中,是否可以同时以大写和小写形式指定枚举常量?

如何在Java记录中设置BigDecimal类型属性的精度?

Sack()步骤中的合并运算符未按预期工作

迁移到Java 17后,日期显示不准确

在向WebSphere中的文档添加元素时iText挂起

使用Jackson库反序列化json

当构造函数创建一个新实例时,Java为什么需要&new";

删除打印语句会影响功能...腐败在起作用?

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

S数学.exp的相同错误保证也适用于StrictMath.exp吗?

在打开搜索结果时,如何让Eclipse打开整个文件?

无限递归Java问题

简化每个元素本身都是 map 列表的列表

Spring Integration SFTP 连接失败 - 无法协商 kex 算法的密钥交换