언어(Language)/Java

[Java] 자바 ArrayList와 LinkedList의 차이 (어레이 리스트와 링크드 리스트의 차이)

잇트루 2022. 9. 21. 08:00
반응형

ArrayList

ArrayList의 데이터 추가를 하는 상황의 이미지이다.

ArrayList에서 데이터를 추가 또는 삭제하기 위해서는 다른 데이터를 복사해서 이동해야 한다.

ArrayList에 객체를 순차적으로 저장할 때는 저장된 객체를 이동시키지 않아도 되지만,

중간에 위치한 객체를 추가하거나 삭제할 때에는 데이터의 이동이 많이 일어나게 된다.

따라서, 추가 및 삭제에는 속도 저하가 일어나게 된다.

 

하지만, 인덱스의 주소 값을 얻기 위해서는 배열의 주소와 데이터 타입의 크기를 계산하여 접근하기 때문에 빠른 접근이 가능하다.

즉, ArrayList는 검색(읽기) 측면에서는 상대적으로 빠른 속도로 찾을 수 있다.

 

ArrayList의 장점

데이터를 순차적으로 추가하거나 삭제하는 경우 빠른 처리가 가능하다.

데이터를 읽어 들이는 경우 인덱스를 통해 바로 접근할 수 있어 검색이 빠르다.

 

ArrayList의 단점

배열의 중간에 데이터를 추가하거나 삭제하는 경우 해당 인덱스 이후의 값들의 이동이 일어나므로 속도 저하가 발생한다.

 

LinkedList

LinkedList의 구조를 나타내는 그림이다.

만약 그림의 LinkedList {Apple, Orange, Banana}에서 새로운 값 Mango라는 데이터를 Apple와 Orange 사이에 추가하는 상황을 나타내면 다음과 같다.

  1. Mango 객체를 생성한다.
  2. Apple의 Next에 Mango 주소 값을 저장한다.(Mango의 Prev에 Apple의 주소 값이 저장된다.)
  3. Mango의 Next에 Orange의 주소 값을 저장한다.(Orange의 Prev에 Mango의 주소 값이 저장된다.)

 

이처럼 LinkedList의 중간에 데이터를 삽입할 경우 주소 값만 변경해주면 되므로, ArrayList보다 훨씬 빠른 처리속도를 보여준다.

하지만, 검색 측면에서는 데이터를 순차적으로 각 노드에 접근해야 하기 때문에 ArrayList의 검색 속도보다는 느리다.

 

즉, 데이터의 변경이 많을 것으로 예상되면 LinkedList, 그렇지 않은 경우에는 ArrayList를 사용하는 것이 유리하다.

반응형