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集合(三)相关推荐

  1. JAVA集合三:几种Set框架

    参考链接: HOW2J.CN HashSet简单讲解 HashSet HashSet与C++STL中Set基本类似,具有的特点便是: 集合中元素不可重复 集合中元素顺序 ≠ 插入顺序 常用方法 功能 ...

  2. Java集合(三):Queue队列

    前面介绍了列表,其中包括List接口和LinkedList链表和ArrayList数组列表.这节介绍一个也很常见的数据结构:队列. 我们知道,队列是一个可以从尾部添加新元素.从头部删除元素的数据结构. ...

  3. java基础—自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存(java集合三)

    自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存 import java.util.Comparator; import java.util.Iterator; import java ...

  4. Java集合(三、Hashtable)

    Hashtable源码实现上和HashMap基本上没什么大的差别,有兴趣可以查看HashMap一章了解下. 要点总结 1.Hashtable不支持key或者value为null的情况,HashMap和 ...

  5. Java集合(一):Java集合概述

    注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包含了许多接口.虚拟类和实现类.这些接口和类提供了丰富的功能,能够满足基本的聚合需求.下图就是这个框架的整体结构图: ...

  6. 【Java集合 1】java集合有哪些

    目录 一.数组Array和集合的区别 二.Java集合 三.Collection接口 四.Set 五.List

  7. java comparable接口_Java面试题之Java集合篇三

    Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...

  8. 学习笔记 java 集合(三)

    向量类 Vector 和栈类Statck类 和栈类 Statck java 框架集合是java 2中引入的.java 2 之前的版本也支持一些数据结构,其中就有向量类 Victor 与栈类 Statc ...

  9. Java核心技术基础知识学习之Java集合(三)

    文章目录 七.Java集合 7.6 Java 8 增强的 Map 集合 7.6.1 Java 8 中 Map 新增的方法 7.6.2 Java 8 改进的 HashMap 和 HashTable 实现 ...

  10. 【金三银四】Java集合面试题(2021最新版)

    目录 前言 一.集合容器概述 1. 什么是集合 2. 集合的特点 3. 集合和数组的区别 4. 使用集合框架的好处 5. 常用的集合类有哪些? 6. List,Set,Map三者的区别? 7. 集合框 ...

最新文章

  1. 智慧城市搞圈地卖设备的思路该结束了
  2. 删除u盘mbr多余启动项 linux,高手教你怎么修复U盘的MBR
  3. springboot整合springSecurity使用
  4. angularjs ajax header,angularJs/ajax跨域请求携带cookies
  5. 人体神经元细胞分布图片,神经元人体分布大图
  6. 联合利华在天津成立植卓肉匠亚洲研发中心;第129届广交会在云端圆满落幕 | 美通企业日报
  7. 用JS生成声音,实现钢琴演奏
  8. shape_predictor_68_face_landmarks.dat 下载地址
  9. AutoCAD CSCAD注册命令类型的控制
  10. Matplotlib数据可视化画图
  11. 微信小程序ios端唤醒不了拨打电话或者部分电话拨打不了解决方案
  12. python中if in是什么意思_if语句中“ in”的使用和含义?
  13. 服务器的原点和限位信号,CANopen--基于DS402协议的伺服电机原点回零模式实现
  14. 导出excel poi
  15. Java分布式中文分词组件 - word分词(转自:https://github.com/ysc/word)
  16. 下载安装Psychtoolbox详细教程【Windows10+Matlab R2020a】
  17. 使用Mx-Yolov3与Maixhub,本地及线上训练K210模型文件
  18. swapidc如何销售服务器,swapidc对接云服务器
  19. Android 开源热库汇总(二):快速开发库
  20. 如何用普通电脑去看3D电影

热门文章

  1. 智能优化算法:未来搜索算法-附代码
  2. 基于核极限学习机(KELM)分类 -附代码
  3. 【LeetCode】【字符串】题号:*387. 字符串中的第一个唯一字符
  4. 数据结构:最小生成树
  5. 重写Java中equals和hashcode方法的一般规则
  6. nodejs实现同步http请求
  7. python怎么计算指数_如何在Python中使用SciPy计算值和指数值的立方根?
  8. 实习成长之路:后端开发实践系列——领域驱动设计(DDD)编码实践一
  9. 物流的趋势和计算机科技,计算机仿真技术在物流领域的前景分析
  10. Apache Flink 零基础入门教程(六):状态管理及容错机制