ConcurrentLinkedDeque class in Java is an unbounded concurrent deque that stores its elements as linked nodes where each node contains the address of the previous as well as next nodes. It belongs to java.util.concurrent package. This class is a member of the Java Collections Framework. It also extends Object and AbstractCollection classes.
Features of ConcurrentLinkedDeque API
- It does not allow null elements.
- Iterators are weakly consistent.
- Concurrent insertion, removal, and access operations execute safely across multiple threads so it is thread-safe.
- The size method is NOT a constant-time operation
Implementing interfaces
1. Serializable 2. Iterable<E> 3. Collection<E> 4. Deque<E> 5. Queue<E>
Parameters: E — The type of elements in the collection
Syntax:
public class ConcurrentLinkedDeque<E> extends AbstractCollection<E> implements Deque<E>, Serializable
Constructors :
- public ConcurrentLinkedDeque(): It creates an empty deque.
- public ConcurrentLinkedDeque(Collection<E> c): It creates a deque that initially contains the elements of the Collection<E>.
Methods:
Method | Type | Description |
---|---|---|
add(E e) | boolean | Inserts an element in the tail of the deque |
addAll(Collection<E> c) | boolean | Inserts all the elements present in the specified Collection |
addFirst(E e) | void | Adds an element in the front of the deque |
addLast(E e) | void | Adds an element in the last of the deque |
clear() | void | Removes all the elements from the deque |
contains(Object o) | boolean | Returns true if the deque contains the Object O |
descendingIterator() | Iterator<E> | Returns an iterator over the elements in the deque in reverse order. |
element() | E | Retrieves the head of the deque without removing it |
getFirst() | E | Retrieves the first element of the deque |
getLast() | E | Retrieves the last element of the deque |
isEmpty() | boolean | Returns true if the deque contains no elements |
iterator() | Iterator<E> | Returns an iterator over the elements in the deque |
peek() | E | Retrieves the head of the deque without removing it |
poll() | E | Retrieves and removes the head of the deque |
push(E e) | void | Pushes an element onto the stack represented by the deque |
pop() | E | Pops an element from the stack represented by the deque. |
remove() | E | Retrieves and removes the head of the queue |
size() | int | Returns the size of the deque |
toArray() | Object[] | Returns an array containing all of the elements in the deque |
Implementation:
Example
Java
// Java Program to Implement ConcurrentLinkedDeque API // Importing all classes from // java.util package import java.util.*;
import java.util.concurrent.*;
// Class class GFG {
// Main driver method
public static void main(String[] args)
{
// Object 1
// Create a ConcurrentLinkedDeque object
// Declaring object of Integer type
ConcurrentLinkedDeque<Integer> dq
= new ConcurrentLinkedDeque<Integer>();
// Adding element to the front
// using addFirst() method
// Custom entry
dq.add( 89 );
// Adding an element in the last
// using addLast() method
// Custom entry
dq.addLast( 18 );
// Adding an element to the front
// Custom inputs
dq.addFirst( 10 );
dq.add( 45 );
// Displaying the current ConcurrentLinkedDeque
System.out.println( "ConcurrentLinkedDeque1 : "
+ dq);
// Object 2
// Creating a ConcurrentLinkedDeque object
// using ConcurrentLinkedDeque(Collection c)
// Declaring object of Integer type
ConcurrentLinkedDeque<Integer> ldq
= new ConcurrentLinkedDeque<Integer>(dq);
// Displaying the current ConcurrentLinkedDeque
System.out.println( "ConcurrentLinkedDeque2 : "
+ ldq);
// Print the size of the deque
// using size() method
System.out.println( "Size: " + ldq.size());
// Removing all the elements from the deque
// using clear() method
ldq.clear();
// Checking whether the ConcurrentLinkedDeque object
// is empty or not
System.out.println( "Is Deque empty: "
+ ldq.isEmpty());
// Removing the head of deque of object1
dq.remove();
// Iterating over elements and
// printing deque of object1
Iterator it = dq.iterator();
// Condition check using hasNext() which hold
// true till single element remaining in List
while (it.hasNext())
// Print all the elements
System.out.print(it.next() + " " );
}
} |
Output
ConcurrentLinkedDeque1: [10, 89, 18, 45] ConcurrentLinkedDeque2: [10, 89, 18, 45] Size: 4 Is Deque empty: true 89 18 45