2017-12-21 19 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

가 명심가'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)); 
} 

}`별도의 tail` 경우

+0

댕 왜 -1? – MMelvin0581