更好的使用Java集合(三)
2019独角兽企业重金招聘Python工程师标准>>>
队列、双端队列和优先级队列
队列可以有效地在尾部添加一个元素,在头部删除一个元素。有两个端头的队列叫双端队列。
可以有效地在头部和尾部添加或删除元素,但不支持在队列中间添加元素。JavaSE6中引入了Deque接口,并由ArrayDeque和LinkedList类实现。
add(E element);offer(E element); addFirst(E element);offerFirst(E element); addLast(E element);offerLast(E element); |
将给定元素添加到双端队列的头部或尾部。如果队列满了,add*(E element)方法将抛出IllegalStateException异常,而offer*(E element)方法返回false。 |
remove();poll(); removeFirst();pollFirst(); removeLast();pollLast(); |
如果队列不为空,删除并返回队列头部或尾部的元素。如果队列为空,remove*()方法将抛出NoSuchElementException异常,而poll*()方法返回null。 |
element();peek(); getFirst();peekFirst(); getLast();peekLast(); |
如果队列不为空,返回队列头部或尾部的元素。如果队列为空,element()方法和get*()方法将抛出NoSuchElementException异常,而peek*()方法返回null。 |
优 先级队列(priority queue)中的元素可以按照任意的顺序插入,但却总是按照排序的顺序进行检索。无论何时调用remove方法,总会获得当前优先级队列中最小的元素。优 先级队列并没有对所有的元素进行排序,而是使用了堆(heap)。堆是一个可以自我调整的二叉树,可以让最小的元素移动到根,而不必花费时间对元素进行排 序。
public class Task {public Task() {}public Task(String name, int priority) {super();this.name = name;this.priority = priority;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPriority() {return priority;}public void setPriority(int priority) {this.priority = priority;}private String name;private int priority;}
@Testpublic void PriorityQueueTest() {PriorityQueue<Task> pq = new PriorityQueue<Task>(new Comparator<Task>() {public int compare(Task t1, Task t2) {return t1.getPriority() - t2.getPriority();}});pq.add(new Task("task1", 20));pq.add(new Task("task2", 10));pq.add(new Task("task3", 30));for (Task t : pq)System.out.println(t.getName() + "," + t.getPriority());}
结果返回了task2,10;task1,20;task3,30。通过Task的priority属性进行了排序。
转载于:https://my.oschina.net/u/2450666/blog/637359
更好的使用Java集合(三)相关推荐
- JAVA集合三:几种Set框架
参考链接: HOW2J.CN HashSet简单讲解 HashSet HashSet与C++STL中Set基本类似,具有的特点便是: 集合中元素不可重复 集合中元素顺序 ≠ 插入顺序 常用方法 功能 ...
- Java集合(三):Queue队列
前面介绍了列表,其中包括List接口和LinkedList链表和ArrayList数组列表.这节介绍一个也很常见的数据结构:队列. 我们知道,队列是一个可以从尾部添加新元素.从头部删除元素的数据结构. ...
- java基础—自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存(java集合三)
自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存 import java.util.Comparator; import java.util.Iterator; import java ...
- Java集合(三、Hashtable)
Hashtable源码实现上和HashMap基本上没什么大的差别,有兴趣可以查看HashMap一章了解下. 要点总结 1.Hashtable不支持key或者value为null的情况,HashMap和 ...
- Java集合(一):Java集合概述
注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包含了许多接口.虚拟类和实现类.这些接口和类提供了丰富的功能,能够满足基本的聚合需求.下图就是这个框架的整体结构图: ...
- 【Java集合 1】java集合有哪些
目录 一.数组Array和集合的区别 二.Java集合 三.Collection接口 四.Set 五.List
- java comparable接口_Java面试题之Java集合篇三
Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...
- 学习笔记 java 集合(三)
向量类 Vector 和栈类Statck类 和栈类 Statck java 框架集合是java 2中引入的.java 2 之前的版本也支持一些数据结构,其中就有向量类 Victor 与栈类 Statc ...
- Java核心技术基础知识学习之Java集合(三)
文章目录 七.Java集合 7.6 Java 8 增强的 Map 集合 7.6.1 Java 8 中 Map 新增的方法 7.6.2 Java 8 改进的 HashMap 和 HashTable 实现 ...
- 【金三银四】Java集合面试题(2021最新版)
目录 前言 一.集合容器概述 1. 什么是集合 2. 集合的特点 3. 集合和数组的区别 4. 使用集合框架的好处 5. 常用的集合类有哪些? 6. List,Set,Map三者的区别? 7. 集合框 ...
最新文章
- 智慧城市搞圈地卖设备的思路该结束了
- 删除u盘mbr多余启动项 linux,高手教你怎么修复U盘的MBR
- springboot整合springSecurity使用
- angularjs ajax header,angularJs/ajax跨域请求携带cookies
- 人体神经元细胞分布图片,神经元人体分布大图
- 联合利华在天津成立植卓肉匠亚洲研发中心;第129届广交会在云端圆满落幕 | 美通企业日报
- 用JS生成声音,实现钢琴演奏
- shape_predictor_68_face_landmarks.dat 下载地址
- AutoCAD CSCAD注册命令类型的控制
- Matplotlib数据可视化画图
- 微信小程序ios端唤醒不了拨打电话或者部分电话拨打不了解决方案
- python中if in是什么意思_if语句中“ in”的使用和含义?
- 服务器的原点和限位信号,CANopen--基于DS402协议的伺服电机原点回零模式实现
- 导出excel poi
- Java分布式中文分词组件 - word分词(转自:https://github.com/ysc/word)
- 下载安装Psychtoolbox详细教程【Windows10+Matlab R2020a】
- 使用Mx-Yolov3与Maixhub,本地及线上训练K210模型文件
- swapidc如何销售服务器,swapidc对接云服务器
- Android 开源热库汇总(二):快速开发库
- 如何用普通电脑去看3D电影
热门文章
- 智能优化算法:未来搜索算法-附代码
- 基于核极限学习机(KELM)分类 -附代码
- 【LeetCode】【字符串】题号:*387. 字符串中的第一个唯一字符
- 数据结构:最小生成树
- 重写Java中equals和hashcode方法的一般规则
- nodejs实现同步http请求
- python怎么计算指数_如何在Python中使用SciPy计算值和指数值的立方根?
- 实习成长之路:后端开发实践系列——领域驱动设计(DDD)编码实践一
- 物流的趋势和计算机科技,计算机仿真技术在物流领域的前景分析
- Apache Flink 零基础入门教程(六):状态管理及容错机制