Java-集合第四篇Queue集合
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集合的更多相关文章
- Java【第十篇】集合
Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组Java 集合可分为 Set.List ...
- Java集合类学习笔记(Queue集合)
Queue集合用于模拟队列(先进先出:FIFO)这种数据类型. Queue有一个Deque接口,代表一个"双端队列",双端队列可以同时从两端来添加.删除元素,因此Deque的实现类 ...
- Hibernate第四篇【集合映射、一对多和多对一】
前言 前面的我们使用的是一个表的操作,但我们实际的开发中不可能只使用一个表的-因此,本博文主要讲解关联映射 集合映射 需求分析:当用户购买商品,用户可能有多个地址. 数据库表 我们一般如下图一样设计数 ...
- Java第十四天,集合、迭代器的使用
集合 集合框架 一.Collection 1.定义方法: Collection<E> obj = new Collection子类<>(); 因为Collection是一个抽象 ...
- 【JAVA并发第四篇】线程安全
1.线程安全 多个线程对同一个共享变量进行读写操作时可能产生不可预见的结果,这就是线程安全问题. 线程安全的核心点就是共享变量,只有在共享变量的情况下才会有线程安全问题.这里说的共享变量,是指多个线程 ...
- Python全栈开发记录_第四篇(集合、函数等知识点)
知识点1:深拷贝和浅拷贝 非拷贝(=赋值:数据完全共享,内存地址一样,修改一个另一个也变化) 浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)像[[1,2],3,4]如果修改列表中列 ...
- java基础 (四)之集合
List集合中的元素可以重复 ArrayList:数组,查询比较快 LinkedList:链表,常用于增删改效率高 Vector:线程安全,synchronized 线程安全的写法:Collectio ...
- Java基础(十八)集合(5)Queue集合
队列是只能在尾部添加元素,同时只能在头部删除元素的数据结构.队列的原则就是“先进先出”. Queue接口是Collection接口的最后一个子接口. Queue接口是队列接口,而Deque接口是Que ...
- java核心技术第四篇之JDBC第二篇
01.JDBC连接池_连接池的概念: 1).什么是连接池:对于多用户程序,为每个用户单独创建一个Connection,会使程序降低效率.这时我们可以创建一个"容器", 这个容器中, ...
随机推荐
- VS2017报错:未提供初始值设定项
今天在使用VS2017写程序时,报错: 出错的代码如下: #include "pch.h" #include <iostream> #include <threa ...
- 九、ARM 汇编与 C 的混合编程
9.1 ARM 汇编与 C 的混合编程 9.1.1 内嵌汇编 __asm __asm("指令")例如关闭/打开总中断开关 CPSR __asm //使用 C 中变量名代替寄存器 { ...
- 六、ARM 寻址方式
寻址方式是针对源操作数来说的 6.1 立即数寻址 源操作数是立即数 立即数:操作码以 # 号开头的数字为立即数 立即数寻址: MOV R0, #0x300 伪指令: LDR R0 ...
- 【洛谷P2398】GCD SUM
题目大意:求 \[\sum\limits_{i=1}^n\sum\limits_{j=1}^ngcd(i,j)\] 题解: 最重要的一步变换在于. \[\sum\limits_{k=1}^n k \s ...
- Cocos Creator更改底层,点击节点获取路径
Mac : 右键creator->显示包内容->Contents->Resources->engine->bin->cocos2d-js-for-preview.j ...
- Java 内存结构之虚拟机栈
2.虚拟机栈 定义:虚拟机栈(Java Virtual Machine Stacks)就是每个线程运行需要的内存空间,栈由一个一个的栈帧(Frame)组成,栈帧就是每个方法运行时需要的内存(方法的参数 ...
- redis数据库的set去重操作
一:业务需求 用户名存储之前进行去重判断 方法一:使用redis的set集合进行去重判断 keys * 查看所有的键 type 键名 查看对应的数据类型 sadd set a b c 往set集合里 ...
- 1.Linux命令行快捷键、Vim
1. 命令终端的快捷键使用 ctrl+b 左移光标 ctrl+f 右移光标 ctrl+u 删除光标左边的内容 ctrl+k 删除光标右边的内容 ctrl+w 删除光标前的一个单词 =esc+ctrl+ ...
- MySQL---时区问题
1.控制台输入select now(); 发现与北京时间相差8小时: 2.解决: 2.1.进入MySQL客户端 mysql -uroot -p 2.2.全局,当前会话时区设置set GLOBAL ...
- Python---进阶---函数式编程---lambda
一. 利用map()函数,把用户输入的不规范的英文,变成首字母大写,其他小写的规范的名字:比如说["ADMAm", "LISA", "JACK&quo ...