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. DDD领域驱动设计初探(七):Web层的搭建

    前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初 ...

  2. Centos7.5源码安装nginx-1.16.0

    安装nginx的依赖包(pcre-devel openssl-devel) yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-deve ...

  3. 【Luogu4299】首都

    BZOJ权限题. 洛谷 题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B ...

  4. 【NOIP2016提高A组模拟8.14】传送带

    题目 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.FTD在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在FTD想从A点走 ...

  5. 【leetcode】1143. Longest Common Subsequence

    题目如下: Given two strings text1 and text2, return the length of their longest common subsequence. A su ...

  6. sass、less中的scoped属性

    1.scoped 的实现原理 Vue中的Less 中的 scoped 属性的效果主要是通过 PostCss 实现的.代码示例: //编译前 <template> <div class ...

  7. Java——容器

    [容器API]    <1>J2SDK所提供的容器位于java.util包内.  

  8. .NET(c#) 移动APP开发平台 - Smobiler(2) - 平台介绍

    看到大家很多人在后台问我一些问题,所以准备写一个系列了,下面给个目录 目录: .NET(c#) 移动APP开发平台 - Smobiler(1) 环境的搭建及上手第一个应用 类似开发WinForm的方式 ...

  9. 2014ACM-ICPC广州站题解(摘自闭幕式)

    第39届ACM-ICPC亚洲区广州站题解 Ltysky摘抄自闭幕式题目分析 Problem A 满足px+qy=c的点(x,y)在一条直线上,而c的值由直线的截距确定,所以最大化c,就要在糖果(x,y ...

  10. [BZOJ1478&1488&1815][SGU282]Isomorphism:Polya定理

    分析 三倍经验题,本文以[BZOJ1478][SGU282]Isomorphism为例展开叙述,主体思路与另外两题大(wan)致(quan)相(yi)同(zhi). 这可能是博主目前写过最长也是最认真 ...