import
java.util.*;
import
java.util.Collection;
import
java.util.Iterator;
import
java.util.concurrent.LinkedBlockingDeque;
import
java.util.concurrent.TimeUnit;
class
LinkedBlockingDequeImpl<E> {
private
LinkedBlockingDeque<E> linkedBlockingDeque;
public
LinkedBlockingDequeImpl()
{
linkedBlockingDeque =
new
LinkedBlockingDeque<E>();
}
public
LinkedBlockingDequeImpl(
Collection<?
extends
E> collection)
{
linkedBlockingDeque
=
new
LinkedBlockingDeque<E>(collection);
}
public
LinkedBlockingDequeImpl(
int
cap)
{
linkedBlockingDeque
=
new
LinkedBlockingDeque<E>(cap);
}
public
void
clear() { linkedBlockingDeque.clear(); }
public
boolean
contains(Object object)
{
return
linkedBlockingDeque.contains(object);
}
public
int
drainTo(Collection<?
super
E> collection)
{
return
linkedBlockingDeque.drainTo(collection);
}
public
int
drainTo(Collection<?
super
E> collection,
int
maxElement)
{
return
linkedBlockingDeque.drainTo(collection,
maxElement);
}
public
Iterator<E> iterator()
{
return
linkedBlockingDeque.iterator();
}
public
boolean
offer(E element)
{
return
linkedBlockingDeque.offer(element);
}
public
boolean
offer(E element,
long
timeout,
TimeUnit unit)
throws
InterruptedException
{
return
linkedBlockingDeque.offer(element, timeout,
unit);
}
public
E peek() {
return
linkedBlockingDeque.peek(); }
public
E poll() {
return
linkedBlockingDeque.poll(); }
public
E poll(
long
timeout, TimeUnit unit)
throws
InterruptedException
{
return
linkedBlockingDeque.poll(timeout, unit);
}
public
void
put(E element)
throws
InterruptedException
{
linkedBlockingDeque.put(element);
}
public
int
remainingCapacity()
{
return
linkedBlockingDeque.remainingCapacity();
}
public
boolean
remove(Object object)
{
return
linkedBlockingDeque.remove(object);
}
public
int
size() {
return
linkedBlockingDeque.size(); }
public
E take()
throws
InterruptedException
{
return
linkedBlockingDeque.take();
}
public
Object[] toArray()
{
return
linkedBlockingDeque.toArray();
}
public
<T> T[] toArray(T[] array)
{
return
linkedBlockingDeque.toArray(array);
}
public
String toString()
{
return
linkedBlockingDeque.toString();
}
public
void
addFirst(E element)
{
linkedBlockingDeque.addFirst(element);
}
public
void
addLast(E element)
{
linkedBlockingDeque.addLast(element);
}
public
void
getFirst()
{
linkedBlockingDeque.getFirst();
}
public
void
getLast() { linkedBlockingDeque.getLast(); }
public
boolean
offerFirst(E element)
{
return
linkedBlockingDeque.offerFirst(element);
}
public
boolean
offerLast(E element)
{
return
linkedBlockingDeque.offerLast(element);
}
public
E peekFirst()
{
return
linkedBlockingDeque.peekFirst();
}
public
E peekLast()
{
return
linkedBlockingDeque.peekLast();
}
}
public
class
LinkedBlockingDequeDemo {
public
static
void
main(String[] args)
throws
InterruptedException
{
LinkedBlockingDequeImpl<Integer> linkedBlockingDeque
=
new
LinkedBlockingDequeImpl<Integer>();
try
{
linkedBlockingDeque.put(
10
);
linkedBlockingDeque.put(
20
);
linkedBlockingDeque.put(
30
);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
System.out.println(
"the elements of the linkedBlockingDeque is "
);
Iterator<Integer> itr = linkedBlockingDeque.iterator();
while
(itr.hasNext())
{
System.out.print(itr.next() +
"\t"
);
}
System.out.println();
linkedBlockingDeque.offer(
60
);
linkedBlockingDeque.offer(
70
);
System.out.println(
"the peak element of the linkedBlockingDeque is(by peeking) "
+ linkedBlockingDeque.peek());
System.out.println(
"the peak element of the linkedBlockingDeque is(by polling) "
+ linkedBlockingDeque.poll());
System.out.println(
"the remaining capacity is "
+ linkedBlockingDeque.remainingCapacity());
System.out.println(
"element 30 removed "
+ linkedBlockingDeque.remove(
30
));
System.out.println(
"the linkedBlockingDeque contains 40 :"
+ linkedBlockingDeque.contains(
40
));
System.out.println(
"the linkedBlockingDeque contains 10 :"
+ linkedBlockingDeque.contains(
10
));
System.out.println(
"the size of the linkedBlockingDeque is "
+ linkedBlockingDeque.size());
System.out.println(linkedBlockingDeque);
}
}