{"id":7321,"date":"2021-07-01T15:35:58","date_gmt":"2021-07-01T19:35:58","guid":{"rendered":"https:\/\/springframework.guru\/?p=7321"},"modified":"2021-09-10T08:55:00","modified_gmt":"2021-09-10T12:55:00","slug":"using-deque-in-java","status":"publish","type":"post","link":"https:\/\/springframework.guru\/using-deque-in-java\/","title":{"rendered":"Using Deque in Java"},"content":{"rendered":"<p>A <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code> is a linear collection that supports element insertion and removal at both ends. The name deque is short for &#8220;double ended queue&#8221; and is usually pronounced &#8220;deck&#8221;.<\/p>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code> interface defines methods to access the elements at both ends of the deque. Methods are provided to insert, remove, and examine the element. Each of these methods exists in two forms: one throws an exception if the operation fails, the other returns a special value (either null or false, depending on the operation).<\/p>\n<p>In this post, you&#8221;ll learn about all implementing classes of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code>, their creation and methods supported by each of them.<\/p>\n<h2>Representation of a Deque<\/h2>\n<p><a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/deque2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7348\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/deque2.jpg\" alt=\"\" width=\"528\" height=\"297\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/deque2.jpg 528w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/deque2-300x169.jpg 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/deque2-410x231.jpg 410w\" sizes=\"(max-width: 528px) 100vw, 528px\" \/><\/a><\/p>\n<p>In <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code> the insertion and removal of elements can either be performed from the front or the rear. Thus, it does not follow FIFO rule (First In First Out).<\/p>\n<h2>Types of Deque<\/h2>\n<dl>\n<dt><strong>Input Restricted Deque<\/strong><\/dt>\n<dd>In this deque, input is restricted at a single end but allows deletion at both the ends.<\/dd>\n<\/dl>\n<dl>\n<dt><strong>Output Restricted Deque<\/strong><\/dt>\n<dd>In this deque, output is restricted at a single end but allows insertion at both the ends.<\/dd>\n<\/dl>\n<h2>Implementing Classes of Deque Interface<\/h2>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code><\/li>\n<\/ul>\n<h2><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code><\/h2>\n<p>It is a resizable-array implementation of the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code> interface with no capacity restrictions.<\/p>\n<p><strong>Features of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code><\/strong><\/p>\n<ul>\n<li>These are not thread-safe which means that in the absence of external synchronization, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code> does not support concurrent access by multiple threads.<\/li>\n<li>Null elements are prohibited in the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code>.<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code> class is likely to be faster than <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Stack<\/code> when used as a stack.<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code> class is likely to be faster than <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedList<\/code> when used as a queue.<\/li>\n<\/ul>\n<h2><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code> Constructors<\/h2>\n<p>There are three constructors to instantiate an instance of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code><\/p>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque()<\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque(int numOfElements)<\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque(Collection&lt;? extends E&gt; c)<\/code><\/li>\n<\/ul>\n<p>This is the code to understand the use of each one of the constructors.<\/p>\n<p><strong>ArrayDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.ArrayDeque;\r\nimport java.util.Deque;\r\n\r\npublic class ArrayDequeExampleDemo {\r\n    public static void main(String[] args) {\r\n        Deque arrayDeque = new ArrayDeque&lt;&gt;();\r\n\r\n        arrayDeque.add(\"first element\");\r\n\r\n        System.out.println(arrayDeque);\r\n\r\n        Deque arrayDeque1 = new ArrayDeque(2);\r\n        arrayDeque1.add(\"element one\");\r\n        arrayDeque1.add(\"element two\");\r\n\r\n        System.out.println(arrayDeque1);\r\n\r\n        Deque arrayDeque2 = new ArrayDeque(arrayDeque1);\r\n        System.out.println(arrayDeque2);\r\n }\r\n}\r\n<\/pre>\n<p>In Line 8, the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque()<\/code>constructor creates an empty array deque with a capacity to hold 16 elements.<\/p>\n<p>Line 14 uses the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque(int numOfElements)<\/code> which sets the deque to contain a specified number of elements, which in our case is 2.<\/p>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque(Collection&lt;? extends E&gt; c)<\/code> constructor in line 20, is used to create an <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code> containing all the elements the same as that of the specified collection.<\/p>\n<p>The output on running the code in IntelliJ is this.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arrayDequeconstructors.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7350\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arrayDequeconstructors.png\" alt=\"constructors\" width=\"692\" height=\"175\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arrayDequeconstructors.png 692w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arrayDequeconstructors-300x76.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arrayDequeconstructors-410x104.png 410w\" sizes=\"(max-width: 692px) 100vw, 692px\" \/><\/a><\/p>\n<h2><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code> Operations<\/h2>\n<p>The various operations of add, remove, access and iterate elements in <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code> are explained below.<\/p>\n<p><strong>Adding elements<\/strong><br \/>\nIn order to add an element to the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code>, we can use the methods <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">add()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addFirst()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addLast()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">offer()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">offerFirst()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">offerLast()<\/code> methods.<\/p>\n<p>This is the code to understand the use of various methods to insert elements.<\/p>\n<p><strong>ArrayDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.ArrayDeque;\r\nimport java.util.Deque;\r\n\r\npublic class ArrayDequeExampleDemo {\r\n    public static void main(String[] args) {\r\n        Deque arrayDeque = new ArrayDeque&lt;&gt;();\r\n        arrayDeque.add(\"first string using add\");\r\n        arrayDeque.addFirst(\"first string using addFirst\");\r\n        arrayDeque.addLast(\"last string using addLast\");\r\n        System.out.println(arrayDeque);\r\n }\r\n}\r\n<\/pre>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">add()<\/code> and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addFirst()<\/code> method inserts element to the front.<\/p>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addLast()<\/code> in Line 11 adds the element at the tail or end.<\/p>\n<p>The output of the preceding code is this.<\/p>\n<p><a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydadd.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7351\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydadd.png\" alt=\"arrayDeque add methods\" width=\"766\" height=\"149\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydadd.png 766w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydadd-300x58.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydadd-410x80.png 410w\" sizes=\"(max-width: 766px) 100vw, 766px\" \/><\/a><\/p>\n<p><strong>Remove elements<\/strong><\/p>\n<p>In order to remove an element from a deque, there are various methods available. Since we can also remove from both the ends, the deque interface provides us with <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeFirst()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeLast()<\/code> methods. Apart from that, this interface also provides us with the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">poll()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">pop()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">pollFirst()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">pollLast()<\/code> methods where <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">pop()<\/code> is used to remove and return the head of the deque.<\/p>\n<p>The code to remove elements using remove methods is this.<\/p>\n<p><strong>ArrayDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.ArrayDeque;\r\nimport java.util.Deque;\r\n\r\npublic class ArrayDequeExampleDemo {\r\n    public static void main(String[] args) {\r\n        Deque arrayDeque = new ArrayDeque&lt;&gt;();\r\n        arrayDeque.add(\"first string using add\");\r\n        arrayDeque.addFirst(\"first string using addFirst\");\r\n        arrayDeque.addLast(\"last string using addLast\");\r\n        arrayDeque.add(\"element 1\");\r\n        System.out.println(arrayDeque);\r\n\r\n        System.out.println(arrayDeque.pop());\r\n        System.out.println(arrayDeque.poll());\r\n        System.out.println(arrayDeque.pollFirst());\r\n        System.out.println(arrayDeque.pollLast());\r\n        System.out.println(arrayDeque);\r\n }\r\n}\r\n<\/pre>\n<p>Here is the output.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqremove.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7353\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqremove.png\" alt=\"remove methods\" width=\"716\" height=\"221\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqremove.png 716w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqremove-300x93.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqremove-410x127.png 410w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><\/a><\/p>\n<p><strong>Access elements<\/strong><\/p>\n<p>After adding the elements, if we wish to access the elements, we can use inbuilt methods like <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">getFirst()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">getLast()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">peek()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">peekFirst()<\/code>, and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">peekLast()<\/code>.<\/p>\n<p>Here is the code to access elements in an <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ArrayDeque<\/code><\/p>\n<p><strong>ArrayDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.ArrayDeque;\r\nimport java.util.Deque;\r\n\r\npublic class ArrayDequeExampleDemo {\r\n    public static void main(String[] args) {\r\n        Deque arrayDeque = new ArrayDeque&lt;&gt;();\r\n         arrayDeque.add(\"one\");\r\n        arrayDeque.addFirst(\"two\");\r\n        arrayDeque.addLast(\"three\");\r\n        arrayDeque.add(\"four\");\r\n        System.out.println(arrayDeque);\r\n\r\n        System.out.println(arrayDeque.getFirst());\r\n        System.out.println(arrayDeque.getLast());\r\n        System.out.println(arrayDeque.peek());\r\n        System.out.println(arrayDeque.peekFirst());\r\n        System.out.println(arrayDeque.peekLast());\r\n }\r\n}\r\n<\/pre>\n<p>The methods to access elements are self-explanatory and you can see the output to have a better understanding.<\/p>\n<p>The output on running the code in IntelliJ is this.<\/p>\n<p><a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqaccess.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7354\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqaccess.png\" alt=\"access elements\" width=\"642\" height=\"215\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqaccess.png 642w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqaccess-300x100.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/arraydqaccess-410x137.png 410w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/a><\/p>\n<h2><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code><\/h2>\n<p>It is used to implement <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code> with the help of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedList<\/code> concurrently. Insertion, removal, and access operations happen concurrently. They do not throw <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentModificationException<\/code> when you try to modify a Collection, and may proceed concurrently with other operations.<\/p>\n<h2><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code> Constructors<\/h2>\n<p>There are two constructors to instantiate a <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code> which are:<\/p>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque()<\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque(Collection&lt;E&gt; c)<\/code><\/li>\n<\/ul>\n<p>This is the code to explain the use of both the constructors to create a concurrent linked deque.<\/p>\n<p><strong>ConcurrentLinkedDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.concurrent.ConcurrentLinkedDeque;\r\n\r\npublic class ConcurrentLinkedDequeExampleDemo {\r\n   public static void main(String[] args) {\r\n       ConcurrentLinkedDeque concurrentLinkedDeque = new ConcurrentLinkedDeque();\r\n\r\n       concurrentLinkedDeque.add(100);\r\n       concurrentLinkedDeque.addFirst(200);\r\n       concurrentLinkedDeque.addFirst(300);\r\n       concurrentLinkedDeque.add(400);\r\n       concurrentLinkedDeque.addFirst(500);\r\n\r\n       System.out.println(concurrentLinkedDeque);\r\n\r\n       ConcurrentLinkedDeque concurrentLinkedDeque1 = new ConcurrentLinkedDeque(concurrentLinkedDeque);\r\n       System.out.println(concurrentLinkedDeque1);\r\n }\r\n}\r\n<\/pre>\n<p>In Line 7, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque()<\/code> constructor constructs an empty deque.<\/p>\n<p>And, in Line 17, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque(Collection&lt;E&gt; c)<\/code>constructor constructs a deque with the elements of the Collection passed as the parameter.<\/p>\n<p>The output on running the code in IntelliJ is this.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldcreation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7327\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldcreation.png\" alt=\"constructor-example\" width=\"687\" height=\"197\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldcreation.png 687w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldcreation-300x86.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldcreation-410x118.png 410w\" sizes=\"(max-width: 687px) 100vw, 687px\" \/><\/a><\/p>\n<h2>Operations of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code><\/h2>\n<p>The methods are provided to perform operations like insert, remove, access, and iterate the elements.<\/p>\n<p><strong>Adding Elements<\/strong><\/p>\n<p>To add an element or Collection of elements, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code> provides methods like <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">add(E e)<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addAll(Collection&lt;? extends E&gt; c)<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addFirst(E e)<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addLast(E e)<\/code> methods.<\/p>\n<p>The code to explain the preceded methods is this.<\/p>\n<p><strong>ConcurrentLinkedDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.concurrent.ConcurrentLinkedDeque;\r\n\r\npublic class ConcurrentLinkedDequeExampleDemo {\r\n   public static void main(String[] args) {\r\n       ConcurrentLinkedDeque concurrentLinkedDeque = new ConcurrentLinkedDeque();\r\n\r\n       concurrentLinkedDeque.add(70);\r\n       concurrentLinkedDeque.add(50);\r\n       concurrentLinkedDeque.add(90);\r\n       concurrentLinkedDeque.add(10);\r\n\r\n       System.out.println(\"ConcurrentLinkedDeque\"+ concurrentLinkedDeque);\r\n\r\n       concurrentLinkedDeque.addFirst(80);\r\n\r\n       System.out.println(\"ConcurrentLinkedDeque after using addFirst\"+ concurrentLinkedDeque);\r\n\r\n       concurrentLinkedDeque.addLast(40);\r\n       System.out.println(\"ConcurrentLinkedDeque after using addLast\"+ concurrentLinkedDeque);\r\n\r\n       ConcurrentLinkedDeque concurrentLinkedDeque1 = new ConcurrentLinkedDeque();\r\n       concurrentLinkedDeque1.addAll(concurrentLinkedDeque);\r\n       System.out.println(\"ConcurrentLinkedDeque after using addAll\"+ concurrentLinkedDeque1);\r\n }\r\n}\r\n<\/pre>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">add()<\/code> and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addLast()<\/code> methods in Line number 9 and 20 respectively adds elements to the tail.<\/p>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addFirst()<\/code> method in Line 16 adds element to the head.<\/p>\n<p>In Line 24, the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addAll()<\/code> method adds all the elements of the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code> to the instance of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque1<\/code>.<\/p>\n<p><strong>Note :<\/strong> The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addLast()<\/code> is equivalent to <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">add()<\/code> method.<\/p>\n<p>This is the output of the preceding code.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldaddition.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7328\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldaddition.png\" alt=\"addition \" width=\"686\" height=\"230\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldaddition.png 686w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldaddition-300x101.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldaddition-410x137.png 410w\" sizes=\"(max-width: 686px) 100vw, 686px\" \/><\/a><\/p>\n<p><strong>Remove Elements<\/strong><\/p>\n<p>To remove an element, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code> provides methods like <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeFirst()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeLast()<\/code> and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove(Object)<\/code>.<\/p>\n<p>This is the code to demonstrate the use of different methods to remove elements from a <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">concurrentLinkedDeque<\/code>.<\/p>\n<p><strong>ConcurrentLinkedDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.concurrent.ConcurrentLinkedDeque;\r\n\r\npublic class ConcurrentLinkedDequeExampleDemo {\r\n    public static void main(String[] args) {\r\n        ConcurrentLinkedDeque concurrentLinkedDeque = new ConcurrentLinkedDeque();\r\n\r\n        concurrentLinkedDeque.add(70);\r\n        concurrentLinkedDeque.add(50);\r\n        concurrentLinkedDeque.add(90);\r\n        concurrentLinkedDeque.add(10);\r\n\r\n        System.out.println(\"ConcurrentLinkedDeque\"+ concurrentLinkedDeque);\r\n\r\n        concurrentLinkedDeque.remove(10);\r\n        System.out.println(concurrentLinkedDeque);\r\n        concurrentLinkedDeque.remove();\r\n        System.out.println(concurrentLinkedDeque);\r\n        concurrentLinkedDeque.removeFirst();\r\n        System.out.println(concurrentLinkedDeque);\r\n        concurrentLinkedDeque.removeLast();\r\n        System.out.println(concurrentLinkedDeque);   \r\n }\r\n}\r\n<\/pre>\n<p>In Line 16, the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove(Object)<\/code> method removes 10 from the deque.<\/p>\n<p>Line 18 uses the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove()<\/code> method to remove the first element in the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code>.<\/p>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeFirst()<\/code> method in Line 20 is also used to remove the first element.<\/p>\n<p>And, in Line 22,<code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeLast()<\/code> method removes the last element.<\/p>\n<p><strong>Note :<\/strong> The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove()<\/code> method is equivalent to <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeFirst()<\/code>.<\/p>\n<p>The output of the preceding code is this.<\/p>\n<p><a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldremove.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7330\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldremove.png\" alt=\"removing elements\" width=\"682\" height=\"293\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldremove.png 682w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldremove-300x129.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/cldremove-410x176.png 410w\" sizes=\"(max-width: 682px) 100vw, 682px\" \/><\/a><\/p>\n<p><strong>Iterating Elements<\/strong><\/p>\n<p>You can iterate the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code> using <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">iterator()<\/code> or <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">descendingIterator()<\/code> methods.<\/p>\n<p>Here is the code to explain the use of both the iterators.<\/p>\n<p><strong>ConcurrentLinkedDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.Iterator;\r\nimport java.util.concurrent.ConcurrentLinkedDeque;\r\n\r\npublic class ConcurrentLinkedDequeExampleDemo {\r\n   public static void main(String[] args) {\r\n       ConcurrentLinkedDeque concurrentLinkedDeque = new ConcurrentLinkedDeque();\r\n\r\n       concurrentLinkedDeque.add(70);\r\n       concurrentLinkedDeque.add(50);\r\n       concurrentLinkedDeque.add(90);\r\n       concurrentLinkedDeque.add(10);\r\n\r\n       System.out.println(\"ConcurrentLinkedDeque\"+ concurrentLinkedDeque);\r\n\r\n       Iterator iterator = concurrentLinkedDeque.iterator();\r\n       System.out.println(\"The values of ConcurrentLinkedDeque are:\");\r\n       while(iterator.hasNext()) {\r\n           System.out.println(iterator.next());\r\n       }\r\n\r\n       Iterator descendingIterator = concurrentLinkedDeque.descendingIterator();\r\n       System.out.println(\"The values of ConcurrentLinkedDeque using descendingIterator are:\");\r\n       while(descendingIterator.hasNext()) {\r\n           System.out.println(descendingIterator.next());\r\n       }\r\n   }\r\n}\r\n<\/pre>\n<p>The only difference in using <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">descendingIterator()<\/code>is it traverses through the values in reverse order unlike the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Iterator()<\/code>.<\/p>\n<p>Here is the output for the preceding code.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/clditeration.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7329\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/clditeration.png\" alt=\"iteration\" width=\"750\" height=\"361\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/clditeration.png 750w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/clditeration-300x144.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/clditeration-410x197.png 410w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<h2><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code><\/h2>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code> is a deque that blocks a thread if that thread tries to take elements out of it while the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code> is empty. It implements the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">BlockingDeque<\/code> and provides an optionally-bounded functionality based on linked nodes.<\/p>\n<p>This optional capacity bound constructor argument serves as a way to prevent excessive expansion and memory wastage.<\/p>\n<h2><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code> Constructors<\/h2>\n<p>There are three constructors to create an instance of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code>.<\/p>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque()<\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque(int capacity)<\/code><\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque(Collection c)<\/code><\/li>\n<\/ul>\n<p>This is the code to demonstrate all three of the above-mentioned constructors.<\/p>\n<p><strong>LinkedBlockingDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.concurrent.LinkedBlockingDeque;\r\n\r\npublic class LinkedBlockingDequeExampleDemo {\r\n   public static void main(String[] args) throws InterruptedException {\r\n\r\n       LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque();\r\n       linkedBlockingDeque.add(12345);\r\n       linkedBlockingDeque.add(23456);\r\n\r\n\r\n       LinkedBlockingDeque linkedBlockingDeque1 = new LinkedBlockingDeque(2);\r\n       linkedBlockingDeque1.add(1234567);\r\n       linkedBlockingDeque1.add(234567);\r\n\/\/        linkedBlockingDeque1.add(345678);\r\n\r\n       LinkedBlockingDeque linkedBlockingDeque2 = new LinkedBlockingDeque(linkedBlockingDeque1);\r\n\r\n       System.out.println(linkedBlockingDeque);\r\n       System.out.println(linkedBlockingDeque1);\r\n       System.out.println(linkedBlockingDeque2);\r\n }\r\n}\r\n<\/pre>\n<p>In Line 8, the simple <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque()<\/code> constructor is used to create a <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code> with a capacity of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Integer.MAX_VALUE<\/code>.<\/p>\n<p>In Line 13, the capacity is fixed which is set to 2 here. And in Line 14, I am trying to add a third element to the deque, which will throw a <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque Full<\/code> exception for me.<\/p>\n<p>In Line 18, the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque(Collection c)<\/code> constructor creates a deque containing the elements of the given collection. Thus, it will contain all the elements of the specified collection which is here set to <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque1<\/code> instance.<\/p>\n<p>The output on running the code in IntelliJ is this.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7331\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation.png\" alt=\"creation of lbd\" width=\"694\" height=\"183\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation.png 694w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation-300x79.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation-410x108.png 410w\" sizes=\"(max-width: 694px) 100vw, 694px\" \/><\/a><\/p>\n<h2>Operations of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code><\/h2>\n<p>This class and its iterator implement all of the optional methods of the Collection and Iterator interfaces.<\/p>\n<p>There are various methods provided by <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code> to perform different operations of adding and removing the elements at both ends, accessing and iterating the elements.<\/p>\n<p><strong>Adding elements<\/strong><\/p>\n<p>There are methods like <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">add()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addFirst()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addLast()<\/code>, and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addAll()<\/code> to add or insert methods at both ends.<\/p>\n<p>This code demonstrates the use of the preceding methods.<\/p>\n<p><strong>LinkedBlockingDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.concurrent.LinkedBlockingDeque;\r\n\r\npublic class LinkedBlockingDequeExampleDemo {\r\n   public static void main(String[] args) throws InterruptedException {\r\n\r\n       LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque();\r\n\r\n       linkedBlockingDeque.addFirst(1234567);\r\n       linkedBlockingDeque.add(65404);\r\n       linkedBlockingDeque.addLast(6754321);\r\n\r\n       System.out.println(\"Linked Blocking Deque: \" + linkedBlockingDeque);\r\n  }\r\n}\r\n\r\n<\/pre>\n<p>In Line 10, the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addFirst()<\/code> method is used to insert integer to the head or start.<\/p>\n<p>In Line 11, the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">add()<\/code> method inserts a number to the end of the deque.<\/p>\n<p>And in Line 12, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">addLast()<\/code> method adds an integer to the tail or end.<\/p>\n<p><strong>Note :<\/strong> When both add() and addLast() methods are used, the element inserted through addLast() method gets inserted at the tail or end.<\/p>\n<p>This is the output on running the code in IntelliJ.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdaddmethods.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7332\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdaddmethods.png\" alt=\"adding elements\" width=\"689\" height=\"220\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdaddmethods.png 689w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdaddmethods-300x96.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdaddmethods-410x131.png 410w\" sizes=\"(max-width: 689px) 100vw, 689px\" \/><\/a><\/p>\n<p><strong>Removing elements<\/strong><\/p>\n<p>There are methods like <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove()<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeFirst()<\/code> and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeAll()<\/code> to remove elements from a <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code>.<\/p>\n<p>Here is the code to understand the use of each one of them.<\/p>\n<p><strong>LinkedBlockingDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.concurrent.LinkedBlockingDeque;\r\n\r\npublic class LinkedBlockingDequeExampleDemo {\r\n    public static void main(String[] args) throws InterruptedException {\r\n\r\n        LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque();\r\n        linkedBlockingDeque.addFirst(35658786);\r\n        linkedBlockingDeque.addFirst(5006566);\r\n        linkedBlockingDeque.addFirst(87654678);\r\n        linkedBlockingDeque.add(1230089);\r\n        linkedBlockingDeque.add(7654321);\r\n\r\n        System.out.println(\"Linked Blocking Deque: \" + linkedBlockingDeque);\r\n\r\n        linkedBlockingDeque.remove();\r\n        System.out.println(\"Linked Blocking Deque: \" + linkedBlockingDeque);\r\n\r\n        linkedBlockingDeque.removeFirst();\r\n        System.out.println(\"Linked Blocking Deque: \" + linkedBlockingDeque);\r\n\r\n        linkedBlockingDeque.removeLast();\r\n        System.out.println(\"Linked Blocking Deque: \" + linkedBlockingDeque);\r\n\r\n        }\r\n    }\r\n\r\n<\/pre>\n<p>Line 17 uses the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove()<\/code> method to remove the first element.<\/p>\n<p>In Line 20, the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeFirst()<\/code> method also removes the first element.<\/p>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeLast()<\/code> method in Line 23, removes the last element of the deque.<\/p>\n<p><strong>Note :<\/strong> The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">removeFirst()<\/code> method is equivalent to <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">remove()<\/code>.<\/p>\n<p>This is the output on running the code in IntelliJ.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdremove.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7340\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdremove.png\" alt=\"\" width=\"774\" height=\"205\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdremove.png 774w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdremove-300x79.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdremove-768x203.png 768w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdremove-410x109.png 410w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><\/a><\/p>\n<p><strong>Iterating Elements<\/strong><\/p>\n<p>The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Iterator()<\/code> method of <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code> returns an iterator over the elements in deque in proper sequence. The elements will be returned in order from first (head) to last (tail).<\/p>\n<p>The code to iterate over elements in a <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code> is this.<\/p>\n<p><strong>LinkedBlockingDequeExampleDemo.java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\">package org.springframework.guru;\r\n\r\nimport java.util.Iterator;\r\nimport java.util.concurrent.LinkedBlockingDeque;\r\n\r\npublic class LinkedBlockingDequeExampleDemo {\r\n   public static void main(String[] args) throws InterruptedException {\r\n\r\n       LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque();\r\n\r\n       linkedBlockingDeque.addFirst(1234567);\r\n       linkedBlockingDeque.addFirst(35658786);\r\n       linkedBlockingDeque.addFirst(5006566);\r\n       linkedBlockingDeque.addFirst(87654678);\r\n\r\n       Iterator iteratorVals = linkedBlockingDeque.iterator();\r\n\r\n       System.out.println(\"The iterator values\"\r\n               + \" of LinkedBlockingDeque are:\");\r\n       while (iteratorVals.hasNext()) {\r\n           System.out.println(iteratorVals.next());\r\n       }\r\n   }\r\n}\r\n<\/pre>\n<p>The output of the preceding code is this.<br \/>\n<a href=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7341\" src=\"http:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation-1.png\" alt=\"\" width=\"694\" height=\"183\" srcset=\"https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation-1.png 694w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation-1-300x79.png 300w, https:\/\/springframework.guru\/wp-content\/uploads\/2021\/07\/lbdcreation-1-410x108.png 410w\" sizes=\"(max-width: 694px) 100vw, 694px\" \/><\/a><\/p>\n<h2>Summary<\/h2>\n<p>There are not many places where <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">Deque<\/code> is used, but it finds its application in storing a web browser&#8217;s history or for storing a software application&#8217;s list of undo operations. It also helps in implementing both stacks and queues.<br \/>\nMoreover, we use <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">LinkedBlockingDeque<\/code> only when a single thread operates on our data and when we need blocking for our application. The <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"git\" data-enlighter-linenumbers=\"false\">ConcurrentLinkedDeque<\/code>, on the other hand is used for a multi-threaded application and when we want that each one of our thread can access the data.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A Deque is a linear collection that supports element insertion and removal at both ends. The name deque is short for &#8220;double ended queue&#8221; and is usually pronounced &#8220;deck&#8221;. The Deque interface defines methods to access the elements at both ends of the deque. Methods are provided to insert, remove, and examine the element. Each [&hellip;]<a href=\"https:\/\/springframework.guru\/using-deque-in-java\/\" class=\"df-link-excerpt\">Continue reading<\/a><\/p>\n","protected":false},"author":111,"featured_media":4592,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[20],"tags":[362,364,27],"class_list":["post-7321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-collections","tag-deque","tag-java"],"jetpack_publicize_connections":[],"aioseo_notices":[],"modified_by":"jt","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/springframework.guru\/wp-content\/uploads\/2015\/03\/Banner560x292_07web.jpg","jetpack_shortlink":"https:\/\/wp.me\/p5BZrZ-1U5","_links":{"self":[{"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/posts\/7321"}],"collection":[{"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/users\/111"}],"replies":[{"embeddable":true,"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/comments?post=7321"}],"version-history":[{"count":30,"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/posts\/7321\/revisions"}],"predecessor-version":[{"id":7604,"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/posts\/7321\/revisions\/7604"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/media\/4592"}],"wp:attachment":[{"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/media?parent=7321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/categories?post=7321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/springframework.guru\/wp-json\/wp\/v2\/tags?post=7321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}