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?
这些问题的答案可以在我的下表中找到。
| ArrayList | ArrayDeque |
|---|---|
| 元素可以在任何位置插入/删除,包括最后一个。 | 元素在两端插入/删除,即开始和最后一个。 |
| 元素是通过索引访问的 | 元素可以通过起始索引或结束索引来访问 |
| 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类。