JAVA

Java Collection - List

icedstone 2025. 8. 8. 10:37
반응형

가장 자주 비교되는 ArrayList와 LinkedList 그리고 Array하고는 어떻게 다른지 확인해보자

ArrayList의 경우 실제 내부에 Array구조를 가져가고 있다.

class ArrayList<E> {
    Object[] data;
    
    E get(int index) {
      return (E) data[index];
    }
}

 

결국 ArrayList도 내부적으로 Array형태를 가져가고 있지만, 핵심은 동적인 리사이징 기능이다.

Array의 경우 최초에 선언한 사이즈에서 조절이 불가능하다. ArrayList의 경우 초기 설정한 size보다 더 많은 양의 데이터가 들어올 경우 자동으로 사이즈를 조절하여 새로운 배열에 데이터가 쌓인다.

그렇다면 ArrayList에 무작정 데이터를 적재하면 어떻게 될까?

배열의 사이즈는 기본값 10으로 시작한다. 그리고 데이터가 초과될 때 마다 1.5배로 사이즈를 확장한다. 10 -> 15 -> 22 이렇게 사이즈가 커지고 당연히 여기서는 그만큼의 성능을 요구한다.(만약 사이즈가 변경되는 시점에 같이 사용하는 Thread가 있다면 동시성 문제 또한 있을 수 있다.)

 

그러니 사이즈가 얼마큼 커질지 알고 있다면 당연히 사이즈를 지정해서 선언하는것이 유리하다.

List<String> list = new ArrayList(255);

 

그에 비해서 LinkedList의 경우에는 아래와 같이 이중 연결 리스트 구조로 되어있다.

class LinkedList<E> {
    Node<E> first;
    Node<E> last;
}

그렇기에 탐색을 할 경우 시작부터 index위치까지 순회해야한다(O(n)). 대신 삽입/삭제가 빈번한 경우 다음 Node의 포인터만 변경해주면 되기 때문에, 중간 위치에 있는 데이터도 빠른 변경이 가능하다. 만약 데이터가 많고 삽입/삭제가 빈번하다면 ArrayList 보다 유리할 수 있다.

 

반응형

'JAVA' 카테고리의 다른 글

Java Collection - Map  (3) 2025.08.08
Java IO vs NIO  (0) 2025.07.20
Java Collection Framework  (4) 2025.07.12
interface vs abstract class  (1) 2025.07.05
Blocking vs Non-Blocking, Synchronous vs Asynchronous  (0) 2025.04.21