1、什么是Queue

模拟队列数据结构,先进先出(FIFO),从队尾加元素,从队头取元素。

   

2、Queue接口中定义了如下几个方法:

1》void add(Object o):将指定元素加入此队列的尾部。

2》Object element():获取队列头部的元素,但是不删除该元素。

3》boolean offer(Object e):将指定元素加入此队列的尾部。当使用有容量限制的队列时,此方法通常比add(Object e)方法更好。

4》Object peek():获取队列头部的元素,但是不删除该元素。如果此队列为空,则返回null。

5》Object poll():获取队列头部的元素,并删除该元素。如果此队列为空,则返回null。

6》Object remove():获取队列头部的元素,并删除该元素。

3、Queue有一个PriorityQueue实现类,还有一个Deque接口。

Deque代表“双端队列”,双端队列可以同时往两头添加、删除元素,因为Deque既可以当队列使用,也可以当栈使用。Deque提供了ArrayDeque和LinkedList两个实现类。

4、PriorityQueue实现类

该实现类并不遵守先进先出的原则。它保存元素不是按照队列添加的顺序,而是按照队列元素的大小进行重新排序。因此使用peek()或者poll()方法取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。

PriorityQueue不允许插入null元素,他还需要对队列排序:

1》自然排序:集合中的元素必须实现Comparable接口,而且是同一个类的多个实例,否则可能导致强制类型转换异常。

 2》定制排序:创建PriorityQueue队列时,传入一个Comparator对象,该对象负责对队列中的所有元素进行排序。定制排序不要求队列元素实现Comparable接口。

5、Deque接口与ArrayDeque实现类

Deque是Queue的子接口,它代表一个双端队列一些操纵双端队列的方法:

Deque提供了一个典型的实现类ArrayDeque,基于数组实现的双端队列,创建Deque时同样可以指定一个numElements参数,该参数用于指定Object[]数组的长度,如果没有指定则默认是16。

6、LinkedList实现类

LinkedList类是List接口和Deque接口的实现类,由于它是List接口的实现类,可以根据索引随机访问集合中的元素。又是Deque接口的实现类,所以又可以当成双端队列使用。

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

7、各种线性表性能分析

List是一个线性表接口,ArrayList、LinkedList又是线性表的两种典型实现:基于数组的线性表和基于链的线性表。

ArrayList是基于数组实现的,存储元素以一片连续的区域保存数组的所有元素,所以数组的随机访问性能最好。LineedList内部以链表作为底层实现,在执行插入、删除操作是有较好的性能。

关于List集合的使用的几点建议:

1》遍历List集合元素,ArrayList、Vector集合采用随机访问方法(get)来遍历集合元素性能更好;对于LinkedList集合,采用迭代器(Iterator)来遍历集合元素更好。

2》需要经常执行插入、删除改变包含大量数据的List集合的大小,可考虑LinkedList集合。ArrayList、Vector集合可能需要经常重新分配内部数组的大小,性能会受影响。

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

Java-集合第四篇Queue集合的更多相关文章

  1. Java【第十篇】集合

    Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组Java 集合可分为 Set.List ...

  2. Java集合类学习笔记(Queue集合)

    Queue集合用于模拟队列(先进先出:FIFO)这种数据类型. Queue有一个Deque接口,代表一个"双端队列",双端队列可以同时从两端来添加.删除元素,因此Deque的实现类 ...

  3. Hibernate第四篇【集合映射、一对多和多对一】

    前言 前面的我们使用的是一个表的操作,但我们实际的开发中不可能只使用一个表的-因此,本博文主要讲解关联映射 集合映射 需求分析:当用户购买商品,用户可能有多个地址. 数据库表 我们一般如下图一样设计数 ...

  4. Java第十四天,集合、迭代器的使用

    集合 集合框架 一.Collection 1.定义方法: Collection<E> obj = new Collection子类<>(); 因为Collection是一个抽象 ...

  5. 【JAVA并发第四篇】线程安全

    1.线程安全 多个线程对同一个共享变量进行读写操作时可能产生不可预见的结果,这就是线程安全问题. 线程安全的核心点就是共享变量,只有在共享变量的情况下才会有线程安全问题.这里说的共享变量,是指多个线程 ...

  6. Python全栈开发记录_第四篇(集合、函数等知识点)

    知识点1:深拷贝和浅拷贝 非拷贝(=赋值:数据完全共享,内存地址一样,修改一个另一个也变化) 浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)像[[1,2],3,4]如果修改列表中列 ...

  7. java基础 (四)之集合

    List集合中的元素可以重复 ArrayList:数组,查询比较快 LinkedList:链表,常用于增删改效率高 Vector:线程安全,synchronized 线程安全的写法:Collectio ...

  8. Java基础(十八)集合(5)Queue集合

    队列是只能在尾部添加元素,同时只能在头部删除元素的数据结构.队列的原则就是“先进先出”. Queue接口是Collection接口的最后一个子接口. Queue接口是队列接口,而Deque接口是Que ...

  9. java核心技术第四篇之JDBC第二篇

    01.JDBC连接池_连接池的概念: 1).什么是连接池:对于多用户程序,为每个用户单独创建一个Connection,会使程序降低效率.这时我们可以创建一个"容器", 这个容器中, ...

随机推荐

  1. mepg

    MPEG(Moving Picture Experts Group,动态图像专家组)

  2. Linux内核简介、子系统及分类

    一.内核简介 内核:在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的计算机程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及计算机中其他电子组件进行处理,是现代操作系 ...

  3. 高并发-原子性-AtomicInteger

    线程不安全: //请求总次数private static int totalCount = 10000;//最大并发数private static int totalCurrency = 100;// ...

  4. LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)

    LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...

  5. tensorflow打印pb、ckpt模型的参数以及在tensorboard里显示图结构

    打印pb模型参数及可视化结构import tensorflow as tf from tensorflow.python.framework import graph_util tf.reset_de ...

  6. hdu 4609: 3-idiots (FFT)

    题目链接 题意:从N个数中,选出三个两两不同的数,求这三个数能够作为一个三角形的三边长的概率. 题解:用一个数组num[]记录大小为 i 的数出现的次数,通过 num[] 卷 num[] 得到 num ...

  7. Oracle 与 ODAC 一起安装

    Oracle 需要设置path变量支持运行,ODAC安装时会将其路径加入path变量. 导致先搜索到ODAC,连接出现:ora-12560: TNS:protocol adapter error 将p ...

  8. Python常用框架

    序言 所谓专家,就是在一个很小的领域里把所有错误都犯过了的人--尼尔斯·玻尔 Django Flask Tornado 适合后端微服务 资料 flask

  9. Java——static

    [static] <1>static成员变量存储在内存data segment区域,不是存放在堆中. <2>静态成员变量属于整个类,任何一个对象都可以访问这个值:如果没有对象, ...

  10. CodeForces 1197D Yet Another Subarray Problem

    Time limit 2000 ms Memory limit 262144 kB Source Educational Codeforces Round 69 (Rated for Div. 2) ...