在Arrylist中覆盖indexOf的等于

时间:2018-02-21 04:25:37

标签: java override

import java.util.*; 

public class CustomList<E> extends ArrayList<E> {
    public boolean equals(Object b) {
        if (b instanceof Node) {
            Node other = (Node) b; 
            return this.getKey().equals(other.getKey());
        }

        return false; 
    }
}

我正在尝试更改cumstomList的indexOf,所以我想重写equals方法,以便它只比较我的密钥。

但是,上面的代码生成错误说“this.getKey”找不到符号 所以,我想知道如果我想比较Node的密钥应该返回什么?

另一个问题,为什么我不能将“Node”放在CustomList“E”和ArrayList“E”中?

===== 我的意思是,如果我有一个Node类型的arrayList,并且我想通过它的键获得indexOf一个Node,我可以覆盖equals,这样indexOf只比较我的密钥,是否可能?

2 个答案:

答案 0 :(得分:0)

自定义列表中的Equals方法应该将list的实例作为参数而不是Node类型。您必须在Node类equals方法中执行此操作。

答案 1 :(得分:0)

如果要比较Node中的值,对于Node类,正确的实现是这样的:

class Node<T extends Comparable<T>>

如果您希望每个节点都连接到其他节点,您可以将每个节点的属性保留为以下对象:

private T val;
private ArrayList<Node<T>> children;

如果需要遍历连接的节点,可以使用单独的类来跟踪头节点并将其实现为迭代器:

class Tree<T extends Comparable<T>> implements Iterable<Node> {
    private Node<T> rootNode;
    private int numNodes;
}

然后,您将能够使用Tree类轻松遍历您的节点以查找您正在寻找的节点的位置。