자료구조 - Array vs LinkedList

2019-11-08

Array vs LinkedList

array는 논리적 저장 순서와 물리적 저장 순서가 일치하므로 인덱스(index)로 해당 원소에 접근하는 random access가 가능하며 시간 복잡도는 O(1)이다.

배열의 원소를 삽입하거나 삭제한다면, 인덱스가 보다 큰 모든 배열의 원소들을 shift하는 비용이 발생하고 이 경우 시간 복잡도는 O(n)이다.

linkedlist의 원소들은 자기 자신의 다음 원소만을 기억하므로 이 부분만 값을 바꿔주면 삭제와 삽입을 O(1)만에 해결할 수 있다.

하지만 array와 달리 논리적 저장 순서와 물리적 저장 순서가 불일치하므로 search에 O(n)의 시간이 추가적으로 발생한다.

  • array linkedlist  
    탐색 O(1) O(n)
    삽입 O(n) O(n)
    삭제 O(n) O(n)

LinkedList in Java

import java.util.*; 
  
public class Test 
{ 
    public static void main(String args[]) 
    { 
        // Creating object of class linked list 
        LinkedList<String> object = new LinkedList<String>(); 
  
        // Adding elements to the linked list 
        object.add("A"); 
        object.add("B"); 
        object.addLast("C"); 
        object.addFirst("D"); 
        object.add(2, "E"); 
        object.add("F"); 
        object.add("G"); 
        System.out.println("Linked list : " + object); 
  
        // Removing elements from the linked list 
        object.remove("B"); 
        object.remove(3); 
        object.removeFirst(); 
        object.removeLast(); 
        System.out.println("Linked list after deletion: " + object); 
  
        // Finding elements in the linked list 
        boolean status = object.contains("E"); 
  
        if(status) 
            System.out.println("List contains the element 'E' "); 
        else
            System.out.println("List doesn't contain the element 'E'"); 
  
        // Number of elements in the linked list 
        int size = object.size(); 
        System.out.println("Size of linked list = " + size); 
  
        // Get and set elements from linked list 
        Object element = object.get(2); 
        System.out.println("Element returned by get() : " + element); 
        object.set(2, "Y"); 
        System.out.println("Linked list after change : " + object); 
    } 
} 

output

Linked list : [D, A, E, B, C, F, G]
Linked list after deletion: [A, E, F]
List contains the element 'E' 
Size of linked list = 3
Element returned by get() : F
Linked list after change : [A, E, Y]