Java LinkedList - 노드 연결 2

이전 코드에서 출력에 어려움이 있었다. 다음으로 더 편하게 값을 출력하는 것으로 toString() 메소드를 오버라이딩한다.

Node.class

public class Node {
    Object item;
    Node next;

    public Node(Object item) {
        this.item = item;
    }

    @Override
    public String toString() {
        return "Node{" +
                "item=" + item +
                ", next=" + next +
                '}';
    }
}

Main.class

// 노드 생성하고 연결하기: A -> B -> C
Node first = new Node("A");
first.next = new Node("B");
first.next.next = new Node("C");

System.out.println("연결 노드 출력하기");
System.out.println(first);

Node{item=A, next=Node{item=B, next=Node{item=C, next=null}}}

toString에서 객체들을 참조 값이 아닌 플랫하게 실제 값을 출력한 것을 볼 수 있다. 들여쓰기로 보기 좋게 들여쓰기로 바라보자.

Node{
    item=A, 
    next=Node{
        item=B, 
        next=Node{
            item=C, 
            next=null
        }
    }
}

next마다 꼬리 물듯이 노드를 출력한 것을 볼 수 있다.

위 코드는 IDE에서 생성한 toString인데, [A->B->C] 형식처럼 만들어보자.


toString 개선하기

[A->B->C] 포맷으로 출력하도록 toString 오버라이딩한다.

Node.class

public class Node {
    Object item;
    Node next;

    public Node(Object item) {
        this.item = item;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        Node n = this;
        sb.append("[");
        while (n != null) {
            sb.append(n.item);
            if (n.next != null) {
                sb.append("->");
            }
            n = n.next;
        }

        sb.append("]");
        return sb.toString();
    }
}

Main.class

// 노드 생성하고 연결하기: A -> B -> C
Node first = new Node("A");
first.next = new Node("B");
first.next.next = new Node("C");

System.out.println("연결 노드 출력하기");
System.out.println(first);

연결 노드 출력하기
[A->B->C]

첫 번째 노드를 생략하고 [B->C] 포맷으로 바로 출력할 수 도 있다.
Main 에서 이어붙이도록 한다.

System.out.println("첫 노드 생략하고 출력하기");
Node second = first.next;
System.out.println(second);

첫 노드 생략하고 출력하기
[B->C]

  • 처음 작성한 toString() 포맷을 바꾸도록 출력하였다.
  • toString 오버라이딩은 연결된 노드 탐색을 출력하고 가독성 높게 [A->B->C] 포맷으로 출력한다.
  • 반복문 문자를 더하므로 StringBuilder 사용이 효과적이다.
  • 구현에 살펴 본 모든 노드는 while 반복문으로 노드가 없어질 때까지 출력한다.