通用队列实现
正如上一节中所提到的,LinkedList实现了Queue接口,用于提供先入先出(FIFO)队列操作add,poll等。
的 PriorityQueue类是基于所述一个优先级队列堆的数据结构。此队列根据构造时指定的顺序对元素进行排序,这可以是元素的自然顺序或显式强加的排序Comparator。
队列检索操作- ,,poll 和-在队列的头访问的元素。队列的头部是关于指定排序的最少元素。如果多个元素被绑定为最小值,则头部是这些元素之一; 关系被任意打破。removepeekelement
PriorityQueue并且它的迭代器实现了Collection和Iterator接口的所有可选方法。方法中提供的迭代器iterator不保证遍历PriorityQueue任何特定顺序的元素。对于有序遍历,请考虑使用Arrays.sort(pq.toArray())。
并发队列实现
该java.util.concurrent包包含一组同步的Queue接口和类。 BlockingQueue扩展Queue时,在检索元素时等待队列变为非空的操作以及在存储元素时队列中的空间可用。此接口由以下类实现:
LinkedBlockingQueue- 由链接节点支持的可选有界FIFO阻塞队列ArrayBlockingQueue- 由数组支持的有界FIFO阻塞队列PriorityBlockingQueue- 由堆支持的无限制阻塞优先级队列DelayQueue- 由堆支持的基于时间的调度队列SynchronousQueue- 使用该BlockingQueue接口的简单集合点机制
在JDK 7中, TransferQueue专门BlockingQueue用于向队列添加元素的代码可以选择等待(阻塞)另一个线程中的代码来检索元素。TransferQueue有一个实现:
LinkedTransferQueue-TransferQueue基于链接节点的无界。
Deque实现
通用实现包括 LinkedList和ArrayDeque类。该Deque接口支持两端元素的插入,移除和检索。的 ArrayDeque类是的可调整大小的数组实现Deque接口,而 LinkedList类是列表实现。
基本的插入,删除和retieval操作的Deque界面addFirst,addLast,removeFirst,removeLast,getFirst和getLast。该方法addFirst在头部addLast添加元素,而在Deque实例的尾部添加元素。
该LinkedList实施比更灵活ArrayDeque的实现。LinkedList实现所有可选列表操作。null在LinkedList实现中允许元素,但在ArrayDeque实现中不允许。
在效率方面,ArrayDeque比LinkedList两端的添加和删除操作更有效。实现中的最佳操作LinkedList是在迭代期间删除当前元素。LinkedList实现不是迭代的理想结构。
该LinkedList实施消耗比更多的内存ArrayDeque执行。对于ArrayDeque实例遍历,请使用以下任何一种方法:
foreach
该foreach速度快,可用于各种列表。
ArrayDeque <String> aDeque = new ArrayDeque <String>();
。。。
for(String str:aDeque){
的System.out.println(STR);
}
迭代器
它Iterator可以用于各种数据列表的前向遍历。
ArrayDeque <String> aDeque = new ArrayDeque <String>();
。。。
for(Iterator <String> iter = aDeque.iterator(); iter.hasNext();){
的System.out.println(iter.next());
}
并发Deque实现
该 LinkedBlockingDeque班是的并发执行Deque接口。如果双端队列为空,则方法如takeFirst并takeLast等待,直到元素变得可用,然后检索和删除相同的元件。
代码: getlast 和getFirst 的使用
public class ArrayDequeSample {
public static void main(String[] args) {
ArrayDeque<String> aDeque = new ArrayDeque<> ();
aDeque.addFirst("tea");
aDeque.addFirst("milk");
aDeque.addFirst("coffee");
aDeque.addLast("sugar");
/* Iterate through elements in an ArrayDeque instance */
for( Iterator itr = aDeque.iterator(); itr.hasNext(); ) {
System.out.println(itr.next());
}
System.out.println();
aDeque.addFirst("juice");
aDeque.addLast("honey");
System.out.println("First Element : " + aDeque.getFirst());
System.out.println("Last Element : " + aDeque.getLast());
/* Removal of the Deque Elements */
System.out.println("First Element(Removed):"+aDeque.removeFirst());
System.out.println("Last Element Removed:"+aDeque.removeLast());
System.out.println("%nPopped Element : " + aDeque.pop());
System.out.println("%n Size of Array Deque: " + aDeque.size());
}
}
博客介绍了队列和Deque的通用及并发实现。通用队列实现基于优先级队列堆,提供FIFO操作;并发队列有多种阻塞队列实现。Deque通用实现包括不同类,支持两端操作,还介绍了遍历方法。并发Deque实现有特定类,还给出相关代码使用示例。
1197

被折叠的 条评论
为什么被折叠?



