0

我的任务应该是使用单链表(节点)从列表和链表中实现某些方法。

我想知道如何使用它来实现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; }

这只是我的节点及其方法的代码,我已经实现了其他方法,但我不知道 equal 和 hashcode 方法。谢谢你的帮助。

4

3 回答 3

1

阅读:这是 Joshua Bloch 的“Effective Java”的第 3 章。它会告诉你如何正确地做到这一点。

http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf

于 2011-04-18T19:20:40.897 回答
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();

}

于 2011-04-18T19:28:48.430 回答
0

不要考虑对象内部。您正在比较某些对象的两个序列。它们如何在内部实现并不重要。话虽如此,只需逐项比较两个列表,相同的故事。使用物品,机器人表示。

请注意,此实现非常通用,您实际上可以将它用于任何类型的列表甚至集合。

于 2011-04-18T19:30:40.280 回答