java Deque对象的例子

244 阅读5分钟

java中的Deque对象

Deque 是双端队列的缩写,它就像一个普通的队列,可以存储对象的集合。

它是Java 6中引入的集合类之一。为什么deque与其他集合类不同? 答案是,在deque中,我们可以从集合的开始和结束处插入和删除对象。

Deque 是java 6中引入的接口,java.util.collections 包,实现了java.util 包。

Deque接口扩展了java.util.Queue,而Queue又扩展了java.util.Collection,所以我们可以插入/删除/迭代所有集合提供的对象。

Deque是一个接口,所以你不能创建一个对象,Deque由两个类ArrayDeque和 LinkedList实现。

ArrayQueue就像数组列表的实现LinkedList双链接列表的实现。

所以你得到了关于ArrayQueue的基本概念,当我在学习Deque时,ArrayList类出现在我的脑海中,并立即在我脑海中出现了问题。

ArrayQueue和ArrayList之间有什么区别?

什么时候使用ArrayList和ArrayQueue?

这些问题的答案可以在我的下表中找到。

ArrayListArrayDeque
元素可以在任何位置插入/删除,包括最后一个。元素在两端插入/删除,即开始和最后一个。
元素是通过索引访问的元素可以通过起始索引或结束索引来访问
ArrayList是一个可增长的对象数组ArrayDeque是一个可增长的对象数组,更适合于实现堆栈(LIFO)或队列(FIFO)。
对于访问元素来说性能更好,而不是插入/删除操作与访问元素相比,队列在插入/删除操作方面表现更好。

Deque接口方法。

下表包含了我们应用中使用的基本方法。

方法说明
Boolean add(element)在队列的末端插入或添加元素。
void addFirst(element)在队列的开始添加元素
void addLast(element)在队列的末端添加元素
boolean contains(element)返回元素是否包含在队列中
迭代器 iterator()返回队列的迭代器
void addLast(element)在队列的最后添加元素
boolean offer(element)在队列末尾添加元素,如果插入则返回true,否则返回false-没有空间。
boolean offerFirst(element)在队列的开始添加元素,如果插入则返回true,否则返回false-无空间。
boolean offerLast(element)在队列的末端添加元素,如果插入则返回true,否则返回false-没有空间
元素 peek()返回第一个元素,但没有从队列的开始删除,如果是空的,则返回null
元素poll()返回并从队列开始删除元素,如果是空的则为空
元素pop()从deque的开始删除元素,否则为空。
元素push()从deque的开始添加元素,如果是空的,则为空。

基本的Deque例子。

让我们来看看java中Dequa类的各种例子。

如何向队列添加元素?

对于队列,我们可以通过多种方式向deque添加对象。一种方式是使用add 版本方法,另一种是提供版本方法以及push() 方法

Deque dequelist=new ArrayDeque();  
dequelist.add("equity");  
dequelist.addFirst("Derivative");  
dequelist.addLast("commondities");  
or  
dequelist.offer("equity");  
dequelist.offerFirst("Derivative");  
dequelist.offerLast("commondities");  
  
(or)  
dequelist.push("stocks");  
System.out.println(" "+dequelist);  

和输出是

equity Derivative commondities stocks
  • add() method_在对象列表的起始处添加元素

  • addFirst() 方法添加对象列表开始的元素

  • addLast() 方法将元素添加到列表的末尾。

  • offer() 版本方法也和add()版本方法一样。 Offer 但不同的是,如果deque是一个固定大小的集合,我们可以使用 Add版本方法。 如果我们使用 IllegalStateException方法为固定队列添加对象,如果不能添加对象,会抛出 。

还有一个方法,即push() ,它将一个元素添加到队列的末端,如果添加了,则返回真,否则返回假,如果集合中没有足够的空间,则抛出IllegalStateException。

如何删除Deque中的元素?

Deque API提供了许多类型的方法来删除队列中的对象

  • 删除版本方法
  • 轮询版本方法
  • 使用pop()方法
dequelist.remove("equity");  
dequelist.removeFirst("Derivative");  
dequelist.removeLast("commondities");  
or   
dequelist.poll("equity");  
dequelist.pollFirst("Derivative");  
dequelist.pollLast("commondities");  
(or)  
dequelist.pop("stocks")  

deque提供了以下方法来删除元素:

  • poll()方法从deque中删除第一个匹配的对象
  • pollFirst()方法从deque中删除第一个对象
  • pollLast()方法将最后一个对象从deque中删除。

remove版本的方法也做了和poll() 方法一样的事情,只是如果集合是空的,它会抛出NoSuchElementException
poll() 方法如果deque是空的,会返回null。

还有一个方法,即pop() ,从队列中删除一个元素,返回被删除的元素。

如何遍历队列中的元素?

遍历deque中的元素与遍历列表是一样的。我们可以使用Iterator ,为每个循环,或者使用特定的方法,使用peek() 方法。

遍历队列中的对象:-

//using iterator for deque  
Iterator forwardIterator=dequelist.Iterator(); // for forward iteration  
(or)  
Iterator BackwardsIterator=dequelist.descendingIterator(); // for iteration of elements in reverse order  
while(forwardIterator.next()){  
System.out.println(" "+(String)forwardIterator.nextElement());  
}  
//using for each loop in deque  
for(String element:dequelist){  
System.out.print(element);  
}  

和输出是

equity Derivative commondities stocks

获取deque中的特定元素:-

dequelist.element()  
dequelist.peek()  

上述方法从队列中检索元素,如果队列是空的,elemetns会抛出NoSuchElementException,而peek则返回空的。

如何发现一个元素是否存在于deque中?

dequelist.contains("stocks");

要检查一个元素在队列中是否存在,我们必须使用contains(Object)方法,如果存在则返回true,否则返回false。

总结

我们通过基本的例子学习了java中的Deque类。