4.1 배열 리스트(ArrayList)의 단점

배열 리스트는 내부에 배열을 사용해서 데이터를 보관하고 관리한다.

배열의 사용하지 않는 공간 낭비

배열은 필요한 배열의 크기를 미리 확보해야 한다. 데이터가 얼마나 추가될지 예측할 수 없는 경우 나머지 공간은 사용되지 않고 낭비된다.

배열의 중간에 데이터 추가

배열의 앞이나 중간에 데이터를 추가하면 추가할 데이터의 공간을 확보하기 위해 기존 데이터들을 오른쪽으로 이동해야 한다. 그리고 삭제의 경우에는 빈 공간을 채우기 위해 왼쪽으로 이동해야 한다.

이렇게 앞이나 중간에 데이터를 추가하거나 삭제하는 경우 많은 데이터를 이동해야 하기 때문에 성능이 좋지 않다.

4.2 노드와 연결

낭비되는 메모리 없이 딱 필요한 만큼만 메모리를 확보해서 사용하고, 또 앞이나 중간에 데이터를 추가하거나 삭제할 때도 효율적인 자료 구조가 있는데, 바로 노드를 만들고 각 노드를 서로 연결하는 방식이다.

노드

public class Node {
	Object item;
    Node next;
}

노드 클래스는 내부에 저장할 데이터인 item 과, 다음으로 연결할 노드의 참조인 next 를 가진다.

노드의 구조

4.3 직접 구현하는 연결 리스트

노드와 연결 구조를 통해서 리스트로 만든 자료 구조를 연결 리스트(LinkedList)라 한다.

리스트 자료구조

순서가 있고, 중복을 허용하는 자료 구조를 리스트(List)라 한다.