Languages/Java

[Java]ArrayList와 LinkedList 적절하게 사용하기(Java의 동적 배열)

MoonSta 2023. 7. 6. 15:23

 실제 프로그래밍 언어에서 가장 많이 사용되는 자료구조는 바로 리스트이다. Java에서 제공하는 리스트 인터페이스로 구현된 ArrayList와 LinkedList를 알아보고 적절하게 사용하는 방법을 알아보도록 하자.

 

 

[Java]컬렉션(Collection)의 개념과 구조 파악 하기

📌컬렉션(Collection)의 개념과 구조 파악 하기 JAVA의 컬렉션(collection>이란 데이터의 집합을 의미하며 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고과적으로 처리할 수 있는 표준화

mooonstar.tistory.com

 


일반 배열과의 다른 점은?

 

 ArrayList는 일반적으로 배열을 사용한다. 하지만 Array를 사용하지 않고 ArrayList를 사용하는 이유가 있다. 그 이유는 바로 일반 배열은 처음 메모리에 할당될 때 크기가 지정된다. 하지만 이러한 지정된 크기로 인해 여러 가지 문제가 발생한다. 따라서 해당 단점을 보완하기 위해 ArrayList와 LinkList가 등장하게 된 것이다.

 

 


ArrayList는 무엇일까?

 

내부적으로 배열의 형태를 지니고 있고 동적으로 크기가 변경되도록 구현된 리스트

 

ArrayList의 형태

 

 

ArrayList는 LinkedList와 다르게 index라는 참조데이터가 존재하여 검색에 용이합니다. 하지만 데이터의 추가 및 삭제 시 배열의 이동이 일어나기 때문에 성능이 좋지 않습니다. ArrayList에서 데이터가 추가되는 과정을 알아보도록 하겠습니다.

 


 

ArrayList의 데이터 추가 과정

 

ArrayList의 데이터 추가 과정

 

 


 

그렇다면 LinkedList는 무엇일까?

 

요소 간의 연결(Link)을 이용하여 구현된 리스트

 

LinkedList의 형태

 

 위의 이미지와 같이 LinkedList는 연결된 구조를 확인할 수 있습니다. 각 노드는 각각의 Value를 가지고 있을뿐더러, 앞뒤로 연결된 노드의 정보를 가지고 있습니다. 또한 이러한 구조로 인해 데이터의 추가, 삭제 시 인접 노드의 정보만 바꾸어서 주면 되기 때문에 추가, 삭제가 용이합니다. 하지만 특정 노드에 접근하기 위해서는 첫 번째 노드부터 순회하기 때문에 검색 속도가 좋지 않다는 단점도 있습니다.

 


 

둘 중 어떤 경우에 사용해야 할까?

 

 첫 데이터부터 순차적으로 요소에 대한 추가, 삭제가 일어나는 경우에는 ArrayList가 LinkedList 보다 빠르다. 하지만 중간에 요소를 삽입하거나, 삭제되는 경우에는 LinkedList가 빠르다. 즉, 인덱스 기반의 자료구조를 가지고 있는 ArrayList는 요소 검색 속도가 LinkedList보다 빠르다. 하지만 요소의 추가 및 삭제일 경우에는 이전, 혹은 다음 노드만을 참조하는 LinkedList는 이러한 특성 때문에 ArrayList보다 빠른 성능을 보여준다.