1. Overview
In this article, we will learn the Kotlin deque interface and its implementations with examples. A deque is a double-ended queue that allows you to add or remove elements from both the ends (rear and front).
Enqueue– Insertion of a new element to the queueDequeue– Removal of the existing elements from the queue

2. Kotlin deque
Kotlin deque is an interface so you need to use its concrete implementation. The LinkedList is the deque implementation available in Kotlin.

As shown in the above diagram, the LinkedList is the implementation of Deque and Queue. A queue allows to add elements at the read end or remove elements from the front end. We also have PriorityQueue which is an implementation of AbstractQueue.
To use the Linked List as Queue, refer to this article.
The LinkedList deque stores the elements in a standard linked list data structure and thus makes the insertion or removal faster.
3. Linked List deque
You can create a deque object from the LinkedList implementation. For example, the below studentQueue is a Deque object that supports adding or removing elements at both ends.
The functions add and addLast adds the elements at the end or rear, whereas addFirst function adds the element at the starting or front.
import java.util.Deque
import java.util.LinkedList
fun main() {
val studentQueue: Deque<String> = LinkedList<String>(mutableListOf("Agni", "Bob", "Chris", "David", "Emily"))
println(studentQueue)
studentQueue.add("Felix")
println(studentQueue)
studentQueue.addFirst("Afra")
println(studentQueue)
studentQueue.addLast("Geek")
println(studentQueue)
}
3.1. Linked List deque remove and get elements
The poll, remove and removeFirst functions remove the element from the front end of the deque. However, the removeLast function removes the element from the rear end of the deque.
The poll doesn’t throw an exception if the element is not available and simply returns null whereas remove throws NoSuchElementException.
import java.util.Deque
import java.util.LinkedList
fun main() {
val studentQueue: Deque<String> = LinkedList<String>(mutableListOf("Agni", "Bob", "Chris", "David", "Emily"))
println(studentQueue)
val removeElement = studentQueue.remove()
println(studentQueue)
val removeLast = studentQueue.removeLast()
println(studentQueue)
val removeFirst = studentQueue.removeFirst()
println(studentQueue)
}
3.1. Linked List Kotlin deque get element without removal
You can use either element, or peek function to get the element from the queue. Unlike the poll function, these functions don’t remove the element from the queue.
The primary difference between both these functions is that element throws a NoSuchElementException if there are no elements available in the Queue to fetch. But, the peek function returns null and doesn’t throw any error.
import java.util.Deque
import java.util.LinkedList
fun main() {
val studentQueue: Deque<String> = LinkedList<String>(mutableListOf("Agni"))
val element = studentQueue.element()
println(element + " : " + studentQueue)
studentQueue.remove()
val noneAvailable = studentQueue.peek()
println(noneAvailable + " : " +studentQueue)
studentQueue.element()
}
4. Conclusion
To sum up, we have seen the LinkedList deque, implementation of the Deque.