JAVA基础——Queue集合

2019-10-16  本文已影响0人  So_ProbuING

Queue集合

Queue用于模拟队列这种数据结构,队列FIFO的容器。队列的头部保存在队列中存放时间最长的元素,队列的尾部保存在队列中存放时间最短的元素。新元素插入到队列的尾部,访问元素操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素

API

add 、offer 都是将指定元素加入尾部,offer要比add更优

element、remove、peek、poll 都是获取头部元素,

element只获取不删除,队列为空调用会抛出NoSuchElementException

peek只获取不删除,如果队列为空返回null

poll获取元素并删除,队列为空返回null

remove获取队列头部元素并删除,如果队列为null会抛出NoSuchElementException

PriorityQueue实现类

PriorityQueue保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。当调用peek()方法或者poll()方法取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素

PriorityQueue<Integer> pq = new PriorityQueue<>();
        //添加数据到头部
        pq.add(1);
        //添加
        pq.offer(2);
        pq.offer(3);
        pq.offer(4);
        pq.offer(5);
        //获取头部元素 但不删除
        System.out.println("element 获取元素" + pq.element());
        System.out.println("peek获取元素" + pq.peek());
        System.out.println("poll获取元素" + pq.poll());
        System.out.println("remove" + pq.remove());
        //获取头部元素
        System.out.println("集合尺寸" + pq.size());

PriorityQueue不允许插入null元素

PriorityQueue的元素有两种排序方式

Deque接口与ArrayDeque实现类

Deque接口是Queue接口的子接口,代表一个双端队列

API

Deque不仅可以当成双端队列使用,也可以当成栈来使用

ArrayDeque 实现类

ArrayDeque是一个基于数组实现的双端队列。创建Deque可以指定一个numElements参数,用于指定ObJect[]数组的长度。如果不指定numElements参数,Deque底层数组的长度为16

        ArrayDeque<String> stack = new ArrayDeque<>();
        stack.push("aaaa");
        stack.push("bbbb");
        stack.push("cccc");
        //弹栈
        System.out.println("弹栈" + stack.pop());
        //访问第一个元素,但不删除元素
        System.out.println("获取"+ stack.peek());

当程序中需要使用”栈“,推荐使用ArrayDeque,尽量避免使用Stack,Stack性能差

LinkedList实现类

LinkedList类是List接口的实现类,除此之外,LinkedList还实现了Deque接口,因此LinkedList可以被当成双端队列来使用。既可以被当做栈来使用,也可以当做队列来使用

各种线性表的性能分析

Java提供的List就是一个线性表接口。基于数组的线性表和基于链的线性表。Queue代表队列,Deque代表了双端队列。

如果要遍历List集合元素,对于ArrayList Vector使用get来遍历集合元素性能更好。对于LinkedList应该采用迭代器来遍历集合更好

如果要经常执行插入、删除操作 由于ArrayList Vector要经常改变底层数组实现的大小,所以使用LinkedList集合性能更好

如果有多个线程需要同时访问List集合中的元素,可以考虑使用线程安全的集合

上一篇 下一篇

猜你喜欢

热点阅读