ArrayList
)의 단점배열 리스트는 내부에 배열을 사용해서 데이터를 보관하고 관리한다.
배열의 사용하지 않는 공간 낭비
배열은 필요한 배열의 크기를 미리 확보해야 한다. 데이터가 얼마나 추가될지 예측할 수 없는 경우 나머지 공간은 사용되지 않고 낭비된다.
배열의 중간에 데이터 추가
배열의 앞이나 중간에 데이터를 추가하면 추가할 데이터의 공간을 확보하기 위해 기존 데이터들을 오른쪽으로 이동해야 한다. 그리고 삭제의 경우에는 빈 공간을 채우기 위해 왼쪽으로 이동해야 한다.
이렇게 앞이나 중간에 데이터를 추가하거나 삭제하는 경우 많은 데이터를 이동해야 하기 때문에 성능이 좋지 않다.
낭비되는 메모리 없이 딱 필요한 만큼만 메모리를 확보해서 사용하고, 또 앞이나 중간에 데이터를 추가하거나 삭제할 때도 효율적인 자료 구조가 있는데, 바로 노드를 만들고 각 노드를 서로 연결하는 방식이다.
노드
public class Node {
Object item;
Node next;
}
노드 클래스는 내부에 저장할 데이터인 item
과, 다음으로 연결할 노드의 참조인 next
를 가진다.
노드의 구조
노드와 연결 구조를 통해서 리스트로 만든 자료 구조를 연결 리스트(LinkedList
)라 한다.
리스트 자료구조
순서가 있고, 중복을 허용하는 자료 구조를 리스트(List
)라 한다.