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 반복문으로 노드가 없어질 때까지 출력한다.