簡體   English   中英

為鏈表創建平等和哈希碼方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM