ArrayList vs LinkedList

헨도·2025년 1월 21일
0

Java

목록 보기
5/6
post-thumbnail

ArrayList 는 index 를 가지고 있고
LinkedList 는 각 원소마다 앞, 뒤 원소의 위치 값을 가지고 있다.
그래서 조회, 성능, 삭제 시 성능의 차이를 발생시킨다.

ArrayList

  • ArrayList 는 기본적으로 배열(Arrays)을 사용한다.
    하지만 일반 배열과 차이점이 존재하는데...

    일반 배열은 처음에 메모리를 할당할 때 크기를 정해주지만
    ArrayList 는 크기를 지정하지 않고 동적으로 값을 삽입할 수 있다.

    // Arrays
    int[] intArray = new int[5];
    
    // ArrayList
    List<Integer> intArrayList = new ArrayList<>();
  • ArrayList 는 각 데이터의 index 를 가지고 있고, 무작위 접근이 가능하기에 해당 index 의 데이터를 한 번에 가져올 수 있다.

  • 데이터의 삽입과 삭제 시 ArrayList 는 그만큼 위치를 맞춰주어야 한다.
    위의 코드를 예시로 들면 5개의 데이터가 있을 때, 맨 앞 데이터를 삭제했을 경우, 뒤 5개의 데이터가 앞으로 한 칸씩 이동한다.

    List<Integer> intArrayList = new ArrayList<>();
    
    intArrayList.add(1);
    intArrayList.add(2);
    intArrayList.add(3);
    intArrayList.add(4);
    intArrayList.add(5);
    
    Sysytem.out.print(intArryList);
    // 1, 2, 3, 4, 5
    
    intArrayList.remove(3);
    
    Sysytem.out.print(intArryList);
    // 1, 2, 4, 5

    위의 예시처럼 구성되어 있는 intArrayList 를 중간 값 3번을 삭제하면,
    3번에 해당하는 공간만 사라지는 것이 아닌 그 공간을 메꾸기 위해 뒤의 4 와 5가 앞으로 땡겨진다.

    그러므로 삽입과 삭제가 많다면 ArrayList 는 비효율적이다.

LinkedList

  • LinkedList 는 내부적으로 양방향의 연결 리스트로 구성되어 있어 참조하는 원소에 따라 처음부터 정방향 또는 역순으로 조회 가능하다.
    (배열의 단점을 보완하기 위해 LinkedList 가 고안)

    LinkedList<Integer> intLinkedList = new LinkedList<>();
  • LinkedList 는 ArrayList 와는 달리 순차적 접근이기 때문에 검색의 속도가 느리다.

  • LinkedList 는 데이터 추가, 삭제 시 가리키고 있는 주소 값만 변경해주면 되기 때문에 ArrayList 에 비해 상당히 효율적이다.
    2번째 값 삭제 시 1번째 노드가 3번째 노드를 보게하면 된다.

결과

소량의 데이터를 가지고 있을 때는 큰 차이가 없지만,
정적인 데이터를 활용하며 조회가 빈번하다면 ArrayList 를 사용하는 것이 좋고.
동적으로 추가 및 삭제가 빈번하다면 LinkedList 를 사용하는 것이 좋다.

profile
Junior Backend Developer

0개의 댓글