0

私の割り当ては、単一リンクリスト(ノード)を使用して、listおよびlinkedlistから特定のメソッドを実装することになっています。

これを使用してequalsメソッドとhashcodeメソッドをどのように実装するのか疑問に思いました。equalsメソッドは2つのリストを比較しますが、それがノードにどのように変換されるかわかりません。ノードの2つのリストが作成されますか?または、次々と実行され、同等性をテストするメソッドを作成するにはどうすればよいですか?


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 による効果的な 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

オブジェクトの内部について考えないでください。いくつかのオブジェクトの 2 つのシーケンスを比較しています。それらが内部でどのように実装されているかは問題ではありません。そうは言っても、単純に 2 つのリストを項目ごとに比較してください。使用アイテム、ボット表現。

この実装は非常に汎用的であるため、実際にはあらゆるタイプのリストやコレクションに使用できることに注意してください。

于 2011-04-18T19:30:40.280 に答える