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只比较我的密钥,是否可能?
答案 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类轻松遍历您的节点以查找您正在寻找的节点的位置。