[英]Creating an equals and hashcode method for a linkedlist
我的任務應該是使用單鏈表(節點)從鏈表和鏈表實現某些方法。
我想知道如何使用此方法實現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方法。
謝謝你的幫助。
閱讀:這是Joshua Bloch的“ Effective Java”的第3章。 它會告訴您如何正確執行操作。
http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf
您可以從apache commons Apache EqualsBuilder使用實用程序類EqualsBuilder 。 此類提供了為任何類構建良好的equals方法的方法。 它遵循Joshua Bloch在“有效Java”中制定的規則。 另外,Apache公共資源也包含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();
}
不要考慮對象內部。 您正在比較某些對象的兩個序列。 它們在內部如何實現無關緊要。 話雖這么說,只需將兩個列表逐項比較,將相同的故事等同即可。 使用項目,機器人表示。
請注意,此實現是如此通用,您實際上可以將其用於任何類型的列表甚至集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.