20170706 队列Queue接口

参考文献:《Java疯狂讲义》(第三版)

队列Queue接口

PriorityQueue实现类

比较标准的队列实现类。

之所以是比较标准,是因为它保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小重新进行排序。

PriorityQueue有两种排序方式:

1、自然排序

2、定制排序;

Deque接口与ArrayDeque实现类:

Deque接口是Deque接口的子接口,它代表了一个双端队列,它不仅可以当成双端队列来使用,还能当作栈来使用。

ArrayDeque,基于数组实现的双端队列。

知识点:

ArrayList和ArrayDeque两个集合类的实现机制基本相似,它们底层都采用了一个动态的、可重分配的Object[]数组来存储集合元素,当集合元素超出了该数组的容量时,系统会在底层重新分配一个Object[]数组来存储集合元素。

LinkedList类

LinkedList类是List接口的实现类,它是一个List集合,可以根据索引来随机访问集合中的元素。

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

LinkedList与ArrayList、ArrayDeque的实现机制完全不同,ArrayList、ArrayDeque内部以数组的形式来保存集合元素,因此随即访问集合元素时有较高的性能;

而LinkedList内部以链表形式保存集合中的元素,因此随机访问集合元素时性能较差,但在插入、删除功能是性能较出色。

知识点:

对于所有内部基于数组的集合实现,使用随即访问的性能比使用Iterator迭代访问性能要高,因为随即访问会被映射成对数组元素的访问。

使用List集合建议:

1、需要遍历List集合元素,ArrayList、Vector集合应该使用随即访问方法get()来遍历,这样性能更好;对于LinkedList集合,则应该采用迭代器来遍历集合元素;

2、需要经常执行插入、删除操作来改变包含大量数据的List集合的大小,可考虑使用LinkedList集合。使用ArrayList、Vector集合可能经常需要重新分配内部数组的大小,效果较差。

3、如果有多个线程需要同时访问List集合中的元素,开发者可以考虑使用Collections将集合包装成线程安全的集合;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容