배열의 한계를 극복할 수 있는 자료 구조 중의 하나이며 데이터를 단순하지만 효율적으로 다룰 수 있다. 순차적으로 데이터를 저장하고 관리하는 데 사용되며, 자바에서는 ArrayList와 LinkedList 같은 다양한 리스트 구현체를 제공한다.
배열처럼 어떠한 데이터들을 묶기 위한 개념이며, 배열과의 차이는 데이터를 담을 공간의 추가가 가능하다는 점이다.
내부적으로 배열을 사용하여 요소를 저장한다. 요소에 대한 인덱스 접근이 빠르지만, 요소의 삽입 및 삭제가 느리다.
내부적으로 연결 리스트를 사용하여 요소를 저장한다. 인덱스 접근이 느리지만, 요소의 삽입 및 삭제가 빠르다.
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
// ArrayList 생성
ArrayList<String> list = new ArrayList<>();
// 요소 추가
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 요소 조회
System.out.println("첫 번째 요소: " + list.get(0)); // Apple
// 요소 제거
list.remove("Banana");
// 전체 출력
for (String fruit : list) {
System.out.println(fruit);
}
}
}
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
// LinkedList 생성
LinkedList<String> list = new LinkedList<>();
// 요소 추가
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 요소 조회
System.out.println("첫 번째 요소: " + list.get(0)); // Apple
// 요소 제거
list.remove("Banana");
// 전체 출력
for (String fruit : list) {
System.out.println(fruit);
}
}
}
노드(Node)의 연결로 이루어진 자료구조이다.
노드(Node)
연결 리스트에서 데이터를 구성하는 요소이다.
데이터, 연결 정보(링크)로 구성되어 있다.

노드는 데이터와 다음 노드를 가리키는 링크(next)로 구성되어 있다.
제일 앞에 있는 노드를 헤드(head), 제일 끝에 있는 노드를 테일(tail)이라고 한다.

가장 큰 장점은 리스트의 길이가 가변적이라는 것이다.
어떤 노드를 검색하거나 데이터를 변경할 때 바로 찾아낼 수가 없다. 최악의 경우 연결 리스트의 모든 노드를 전부 탐색해야 할 수 있다.
자신의 플레이 리스트에서 자동으로 다음 음악이 재생될 때 사용된다.
실제 stack이나 queue를 구성하는데도 연결 리스트를 활용 한 것이다.
참고 자료