- 이로인해 배열은 필요한 크기를 미리 확보해야 함
- 데이터가 얼마나 추가될지 예측할 수 없는 경우 나머지 공간은 사용되지 않고 낭비됨
- 배열의 앞이나 중간에 데이터를 추가하면 추가할 데이터의 공간을 확보하기 위해 기존 데이터들을 오른쪽으로 이동해야 함
- 그리고 삭제의 경우에는 빈 공간을 채우기 위해 왼쪽으로 이동해야 함
- 이렇게 앞이나 중간에 데이터를 추가하거나 삭제하는 경우 많은 데이터를 이동해야 하기 때문에 성능이 좋지 않음
- 낭비되는 메모리 없이 딱 필요한 만큼만 메모리를 확보해서 사용하고, 또 앞이나 중간에 데이터를 추가하거나 삭제할 때도 효율적인 자료 구조가 있는데, 바로 노드를 만들고 각 노드를 서로 연결하는 방식임
public class Node {
Object item;
Node next;
}
item과 다음으로 연결할 노드의 참조인 next를 가짐
package collection.link;
public class Node {
Object item;
Node next;
public Node(Object item) {
this.item = item;
}
}
package collection.link;
public class NodeMain1 {
public static void main(String[] args) {
//노드 생성하고 연결하기: A -> B -> C
Node first = new Node("A");
first.next = new Node("B");
first.next.next = new Node("C");
System.out.println("모든 노트 탐색하기");
Node x = first;
while (x != null) {
System.out.println(x.item);
x = x.next;
}
}
}
실행결과
모든 노드 탐색하기
A
B
C

1. Node first = new Node("A")

1. first.next = new Node("B")

1. first.next.next = new Node("C")
2. first.next.next = x03
3. x01.next.next = x03
4. x02.next = x03

Node x = first;
while (x != null) {
System.out.println(x.item);
x = x.next;
}
A
B
C