2017-12-21 10 views
-1

ここに私のequalsメソッドの実装があります。誰かが私にそれをチェックアウトして、それがうまくいくか、それを改善できるかを教えてもらえますか?Circularly Linked Listのために書いたequalsメソッドのこの実装を誰かが見渡すことができますか?

public boolean equals(Object o) { 
    if (o == null) return false; 
    if (getClass() != o.getClass()) 
     return false; 
    CircularlyLinkedList other = (CircularlyLinkedList) o; 
    if (size != other.size) 
     return false; 
    if (tail != other.tail) 
     return false; 
    Node walkA = tail.getNext(); 
    Node walkB = other.tail.getNext(); 
    Node sentinel = tail; 
    while (walkA != sentinel) { 
     if (!(walkA.getElement().equals(walkB.getElement()))) 
      return false; 
     walkA = walkA.getNext(); 
     walkB = walkB.getNext(); 
    } 
    return true; 
} 

これで、Object.equalsメソッドではなく、このクラスのequalsメソッドを呼び出すことになりますか?

+1

tail'は 'Node'は、オブジェクト('!= '/' == ')あなたの参照の比較が失敗する分離されている'場合に注意してください。あなたはノードの内容を比較したいと思うでしょう。さらに、 'walkA' /' walkB'変数を再割り当てする必要があります。最後に、あなたのコレクションの実際に含まれているオブジェクトで使用するために 'Object#equals'を調べてください。 – Rogue

+1

それをテストするためのプログラムを書いてみませんか? (ちなみに、私はこのメソッドがいくつかのリストのために終了しないと思う)。 –

+1

JUnitについて学ぶのに最適な時間:) –

答えて

0

だから、私はそれを得たと信じています。

public boolean equals(Object o) { 
    if (o == null) 
     return false; 
    if (getClass() != o.getClass()) 
     return false; 
    CircularlyLinkedList other = (CircularlyLinkedList) o; 
    if (size != other.size) 
     return false; 
    if (tail.equals(other.tail)) 
     return false; 
    Node walkA = tail.getNext(); 
    Node walkB = other.tail.getNext(); 
    int sizeA = size; 
    while (sizeA > 0) { 
     if (!walkA.getElement().equals(walkB.getElement())) 
      return false; 
     walkA = walkA.getNext(); 
     walkB = walkB.getNext(); 
     sizeA--; 
    } 
    return true; 
} 

私のテストプログラムはうまくいきました。

public class TestLinkedLists { 
public static void main(String[] args) { 
    DoublyLinkedList<String> double1 = new DoublyLinkedList<>(); 
    DoublyLinkedList<String> double2 = new DoublyLinkedList<>(); 
    DoublyLinkedList<String> double3 = new DoublyLinkedList<>(); 
    DoublyLinkedList<String> double4 = new DoublyLinkedList<>(); 
    CircularlyLinkedList<String> circ1 = new CircularlyLinkedList<>(); 
    CircularlyLinkedList<String> circ2 = new CircularlyLinkedList<>(); 
    CircularlyLinkedList<String> circ3 = new CircularlyLinkedList<>(); 
    CircularlyLinkedList<String> circ4 = new CircularlyLinkedList<>(); 

    double1.addFirst("asdf"); 
    double1.addFirst("ghjk"); 
    double2.addFirst("asdf"); 
    double2.addFirst("ghjk"); 

    double3.addFirst("asdf"); 
    double3.addFirst("asdf"); 
    double4.addFirst("ghjk"); 
    double4.addFirst("ghjk"); 

    circ1.addFirst("asdf"); 
    circ1.addFirst("ghjk"); 
    circ2.addFirst("asdf"); 
    circ2.addFirst("ghjk"); 

    circ3.addFirst("asdf"); 
    circ3.addFirst("asdf"); 
    circ4.addFirst("ghjk"); 
    circ4.addFirst("ghjk"); 

    System.out.println(double1.equals(double2)); 
    System.out.println(double3.equals(double4)); 
    System.out.println(circ1.equals(circ2)); 
    System.out.println(circ3.equals(circ4)); 
} 

}

+0

ダングなぜ-1? – MMelvin0581

関連する問題