我的任务应该是使用单链表(节点)从列表和链表中实现某些方法。
我想知道如何使用它实现equals方法和hashcode方法,equals方法比较两个列表,但我不确定它是如何转换为节点的,它是否创建了两个节点列表?或者一个接着另一个,我将如何创建测试相等的方法?
public class List12 implements java.util.List {
private Node head;
private int size;
private class Node{
T data;
Node next;
Node previous;
Node(T data){
this.data = data;
}
public Node(){
this.data = null;
this.next = null;
}
public Node(T data, Node<T> next){
this.data = data;
this.next = next;
}
public T getData(){
return data;
}
public void setData(T data){
this.data = data;
}
public Node<T> getNext(){
return next;
}
public void setNext(Node<T> next){
this.next = next;
}
}
public void removeNode(Node node){
if(size == 0)
head = null;
else{
if(node == head){
head = node.next;
node.next.previous = null;
}
else{
node.next.previous = node.previous;
node.previous.next = node.next;
}
}
size--;
}
public Node findNode(int index){
Node myNode;
myNode = head;
while( index-- > 0)
myNode = myNode.next;
return myNode;
}
public List12() {
head = null;
size = 0;
}
这只是我的节点及其方法的代码,我已经实现了其他方法,但我不知道相等和hashcode方法。谢谢你的帮助。
答案 0 :(得分:1)
阅读本文:这是Joshua Bloch的“Effective Java”的第3章。它会告诉你如何正确地做到这一点。
http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf
答案 1 :(得分:0)
您可以使用apache commons Apache EqualsBuilder中的实用程序类EqualsBuilder。此类提供了为任何类构建良好equals方法的方法。它遵循Joshua Bloch在Effective Java中规定的规则。此外,Apache commons还包含HashCodeBuilder类。
代码的典型用法如下(来自EqualsBuilder javadoc):
public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != getClass()) {
return false;
}
MyClass rhs = (MyClass) obj;
return new EqualsBuilder()
.appendSuper(super.equals(obj))
.append(field1, rhs.field1)
.append(field2, rhs.field2)
.append(field3, rhs.field3)
.isEquals();
}
答案 2 :(得分:0)
不要考虑对象内部。您正在比较某些对象的两个序列。它们如何在内部实施并不重要。话虽这么说,只需逐项比较两个列表,相同的故事为equals。使用项目,机器人代表。
请注意,此实现非常通用,您实际上可以将它用于任何类型的列表甚至集合。