集合——队列 实现

通用队列实现

正如上一节中所提到的,LinkedList实现了Queue接口,用于提供先入先出(FIFO)队列操作addpoll等。

的 PriorityQueue类是基于所述一个优先级队列的数据结构。此队列根据构造时指定的顺序对元素进行排序,这可以是元素的自然顺序或显式强加的排序Comparator

队列检索操作- ,,poll 和-在队列的头访问的元素。队列头部是关于指定排序的最少元素。如果多个元素被绑定为最小值,则头部是这些元素之一; 关系被任意打破。removepeekelement

PriorityQueue并且它的迭代器实现了CollectionIterator接口的所有可选方法。方法中提供的迭代器iterator不保证遍历PriorityQueue任何特定顺序的元素。对于有序遍历,请考虑使用Arrays.sort(pq.toArray())

并发队列实现

java.util.concurrent包包含一组同步的Queue接口和类。 BlockingQueue扩展Queue时,在检索元素时等待队列变为非空的操作以及在存储元素时队列中的空间可用。此接口由以下类实现:

在JDK 7中, TransferQueue专门BlockingQueue用于向队列添加元素的代码可以选择等待(阻塞)另一个线程中的代码来检索元素。TransferQueue有一个实现:

Deque实现

通用实现包括 LinkedListArrayDeque类。该Deque接口支持两端元素的插入,移除和检索。的 ArrayDeque类是的可调整大小的数组实现Deque接口,而 LinkedList类是列表实现。

基本的插入,删除和retieval操作的Deque界面addFirstaddLastremoveFirstremoveLastgetFirstgetLast。该方法addFirst在头部addLast添加元素,而在Deque实例的尾部添加元素。

LinkedList实施比更灵活ArrayDeque的实现。LinkedList实现所有可选列表操作。nullLinkedList实现中允许元素,但在ArrayDeque实现中不允许。

在效率方面,ArrayDequeLinkedList两端的添加和删除操作更有效。实现中的最佳操作LinkedList是在迭代期间删除当前元素。LinkedList实现不是迭代的理想结构。

扫描二维码关注公众号,回复: 3330128 查看本文章

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接口。如果双端队列为空,则方法如takeFirsttakeLast等待,直到元素变得可用,然后检索和删除相同的元件。

代码: 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());   

    }
}

猜你喜欢

转载自blog.csdn.net/xiamaocheng/article/details/82222140