LinkedList

sungs·2025년 6월 9일

자바

목록 보기
11/95

📌 LinkedList란?

LinkedList는 데이터를 노드(Node)라는 단위로 연결해서 저장하는 연결형 자료구조. Java에서는 java.util.LinkedList 클래스로 제공되며, List, Deque, Queue 인터페이스를 구현한다.

✅ 자바의 LinkedList는 이중 연결 리스트(Doubly Linked List) 로 구현되어 있다.

✅ ArrayList vs LinkedList

비교 항목ArrayListLinkedList
내부 구조배열이중 연결 리스트
인덱스 접근빠름 (O(1))느림 (O(n))
삽입/삭제느림 (O(n))빠름 (O(1), 위치만 알면)
메모리 사용량적음많음 (노드마다 포인터 필요)

🔍 LinkedList 주요 메서드

LinkedList<String> list = new LinkedList<>();

list.add("Apple");        // 맨 뒤에 추가
list.addFirst("Banana");  // 맨 앞에 추가
list.addLast("Cherry");   // 맨 뒤에 추가

list.remove();            // 맨 앞 제거
list.removeLast();        // 맨 뒤 제거

String first = list.getFirst();  // 첫 요소 조회
String last = list.getLast();    // 마지막 요소 조회

✅ 사용 예시

public class Main {
    public static void main(String[] args) {
        MyLinkedList list = new MyLinkedList();
        list.add("A");
        list.add("B");
        list.add("C");

        list.printList();
        // 출력: A <-> B <-> C <-> null
    }
}

내부 구조

class Node {
    String data;
    Node prev;
    Node next;

    Node(String data) {
        this.data = data;
    }
}

class MyLinkedList {
    private Node head;
    private Node tail;

    public void add(String data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = tail = newNode;
        } else {
            tail.next = newNode;
            newNode.prev = tail;
            tail = newNode;
        }
    }

    public void printList() {
        Node curr = head;
        while (curr != null) {
            System.out.print(curr.data + " <-> ");
            curr = curr.next;
        }
        System.out.println("null");
    }
}

⏱ 시간 복잡도

연산시간 복잡도
get(index)O(n)
add/remove 첫/마지막O(1)
중간 삽입/삭제O(n)

🔎 언제 LinkedList를 사용할까?

  • 요소의 삽입과 삭제가 빈번할 때

  • 데이터를 순차적으로 처리하는 큐나 덱 구조가 필요할 때

  • 인덱스 접근보다 요소의 순차 처리에 집중할 때

✅ 마무리 정리

  • Java의 LinkedList는 이중 연결 리스트로 구현되어 있음

  • ArrayList보다 삽입/삭제는 빠르지만, 조회는 느림

  • 상황에 따라 ArrayList vs LinkedList 를 적절히 선택할 것.

profile
앱 개발 공부 중

0개의 댓글