-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Queue 인터페이스의 구현체 중 하나인 LinkedList와 ArrayDeque의 속도 차이는 얼마나 나고, 언제 써야 효율적일까? #5
Comments
📔시작하기 전에우리는 이 이슈에서 Queue 인터페이스 구현체 중 ArrayDeque와 LinkedList에 대해서 살펴보고자 한다. 사실 ArrayDeque와 LinkedList는 Queue의 구현체이기도 하지만 Deque의 구현체이기도 하다. Java에서 Deque 인터페이스는 Queue 인터페이스를 확장한 인터페이스로 “double ended queue”의 줄임말로 말 그대로 앞 뒤 모두에 삽입, 삭제가 가능하다는 특징이 있다. 이러한 특징을 기반으로 ArrayDeque와 LinkedList에 대해서 비교해보자. 📖ArrayDeque와 LinkedList의 차이점먼저 ArrayDeque에 대해서 살펴보자. ArrayDeque는 이름에서 알 수 있듯이 배열을 기반으로 하는 Deque의 구현체이다. 공식 문서의 내용을 살펴보면 ArrayDeque의 특징은 다음과 같다.
아마도 마지막 문장 때문에 우리는 Queue를 구현할 때 무의식중에 ArrayDeque를 쓰고 있지 않을까 생각이 든다. LinkedList는 list의 구현체로 ArrayDeque와 달리 null 요소를 추가할 수 있다. 또한 배열로 데이터를 다루는 ArrayDeque와 달리 Node를 기반으로 하여 데이터 간의 연결을 하기 때문에 이와 관련하여 더 많은 메모리를 소모할 수 있다. LinkedList의 경우에는 데이터를 삽입, 삭제하는 경우 O(1)의 시간복잡도를 가지지만 중앙에 있는 데이터에 접근하는 경우에는 O(n)의 시간복잡도를 가지게 된다. 어떤 것이 더 효율적일까?
결론상황을 종합해봤을 때 우리는 대부분의 경우에 ArrayDeque를 사용하는 것이 더 효율적임을 알 수 있었다. 하지만 Queue의 확장성(구조적 혹은 기능적)을 위해서는 LinkedList를 사용해야 한다고 이해할 수 있다. 오랜만에 소스코드를 뜯어봤는데 생각보다 배울점이 많았다. 여러분도 한번해보시길! 비고참고 자료https://docs.oracle.com/javase/tutorial/collections/implementations/deque.html https://yjacket.tistory.com/m/48 https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html https://tecoble.techcourse.co.kr/post/2021-05-10-stack-vs-deque/ |
👍 문제
Pg.63에서는 Queue 인터페이스와 구현체에 대해서 서술하고 있다. 하지만 내가 싸피 와서 배운
ArrayDeque
는 다루고 있지 않아서 속상하다.ArrayDeque
에 대한 설명과LinkedList로 구현 한 Queue
와의 속도 차이를 상황별로 비교해 주었으면 좋겠다.ex)
어떤 경우에 LinkedList가 더 효율 적이고,
어떤 경우에는 ArrayDeque가 더 효율 적인지.
일반적인 백준 문제에서는
를 쓰는 것보다
를 쓰는 것이 훨씬 빨라서 ArrayDeque를 자주 애용하고 있는데,
자문을 받았을 때는 문제의 성격에 따라 다르다고 한다.
왜 다른 지, 어떨 때 LinkedList를 쓰는게 더 빠른 지 의문이 생겼다.
📺 관련 챕터 및 레퍼런스
story.04 어디에 담아야 하는지
pg.63
pg 72~76
🐳 비고
난 Queue를 좋아한다.
The text was updated successfully, but these errors were encountered: