链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必按顺序存储,所以插入和删除速度超快。

关于这种队列的数据结构,记住4个字就好:先进先出。



Queue接口继承Collection接口,模拟队列:先进先出(FIFO)。

void add(Object e):将e插入到队列尾部;

Object element():获取队列头部的元素;

boolean offer(Object e):将e插入到队列的尾部,当使用有容量限制的队列时,此方法比add(Object e)方法更好。

Object peek():获取队列头部的元素。如果此双端队列为空,则返回 null。

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

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

  • PriorityQueue

PriorityQueue是一个比较标准的队列实现类,注意了:这个东西保存队列元素的顺序并不是按照加入队列的顺序,而是按照队列元素的大小重新进行排序。我从来没有用过,所以这里不整理了。用一块代码演示下好了:

import java.util.PriorityQueue;

public class Linkin
{
public static void main(String[] args)
{
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
pq.offer(1);
pq.offer(-3);
pq.offer(2);
pq.offer(0);
//pq.offer(null); java.lang.NullPointerException 不能插入空值
System.out.println(pq);//[-3, 0, 2, 1] 顺序莫名其妙的变了,神经病
System.out.println(pq.poll());//-3
} }

  • LinkedList 同时实现了2个接口:List Deque。它可以被当成双端队列来使用,自然也可以当成栈。

LinkedList实现了Deque接口,而Deque是Queue的子接口。ArrayDeque是Deque一个典型的实现类,他是一个基于数组实现的双端队列。

Deque自定义方法:

void addFirst(Object e):把元素插入到该双向队列的开头;

void addLast(Object e):把该元素插入到该双向队列的末尾。

Object getFirst():获取但不删除队列第一个元素;

Object getLast():获取但不删除队列最后一个元素;

boolean offerFirst(Object e):将指定的元素插入到该双向队列的开头;

boolean offerLast(Object e):将指定元素插入到双向队列的末尾;

Object removeFirst():删除第一个元素

Object removeLast():删除最后一个元素

LinkedList

Object peekFirst():获取但不删除队列第一个元素,如队列为null,返回null;

Object peekLast():获取但不删除队列最后一个元素,如队列为null,返回null;

Object pollFirst():获取并删除队列第一个元素,如队列为null,返回null;

Object pollLast():获取并删除队列最后一个元素,如队列为null,返回null;

Object  pop():从此双端队列所表示的堆栈中弹出一个元素。

void push(Object e):将e推入进该队列栈中。

Object removeFirst():获取并删除队列第一个元素。

Object removeFirstOccurrence(Object o):删除队列第一次出现的o元素;

removeLast():获取并删除队列最后一个元素;

removeLastOccurrence(Object o):删除队列中最后一次出现的o元素;



import java.util.LinkedList;

public class Linkin
{
public static void main(String[] args)
{
LinkedList<String> names = new LinkedList<String>();
//将字符串元素加入到队列的尾部
names.offer("LinkinPark...");
//将一个字符串元素加入栈的顶部
names.push("Binger...");
//将字符串元素添加到队列的头部
names.offerFirst("huhu...");
for (String string : names)
{
System.out.println(string);
}
//访问但不删除栈顶的元素
System.out.println(names.peekFirst());
//访问但不删除队列的最后一个元素
System.out.println(names.peekLast());
//将栈顶的元素弹出栈
System.out.println(names.poll());
//下面的输入已经将队列中的第一个元素给删除了
System.out.println(names);
//访问并删除队列的最后一个元素
System.out.println(names.pollLast());
System.out.println(names);
} }

  • 各种线性表性能分析
数组以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好。所有的内部以数组作为底层实现的集合在随机访问时性能都比较好,而内部以链表作为底层实现的集合在执行插入,删除操作时有很好的性能。在进行迭代操作时,以链表作为底层实现的集合比以数组作为底层实现的集合性能好。







linkin大话数据结构--Queue的更多相关文章

  1. linkin大话数据结构--Collection和Iterator

    linkin大话数据结构--Collection和Iterator Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系 ...

  2. linkin大话数据结构--Google commons工具类

    package tz.web.dao.bean; import java.util.Arrays; import java.util.Collection; import java.util.List ...

  3. linkin大话数据结构--List

    List:Collection子接口 List是有序的集合,集合中每个元素都有对应的顺序序列.List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元 ...

  4. linkin大话数据结构--泛型

    泛型(Generic) 什么是泛型? java5开始出现的一种对Java语言类型的一种拓展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数类型时指定的类型占位符,就好比方法的形式参数 ...

  5. linkin大话数据结构--字符串,数组,list之间的互转

    在实际开发中,我们经常会用到字符串,字符数组,字符list,当然也会不可避免的进行这3者之间的互相转换. 在使用到Apache和Google下的common包,可以这样子实现: package tz. ...

  6. linkin大话数据结构--apache commons工具类

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...

  7. linkin大话数据结构--数组

    数组概述:如何正确理解数组?数组也是一种类型 数组是多个相同类型数据的组合,实现对这些数据的统一管理.数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量数组中的元 ...

  8. linkin大话数据结构--Collections类

    操作集合的工具类:Collections Collections 是一个操作 Set.List 和 Map 等集合的工具类.Collections 中提供了大量方法对集合元素进行排序.查询和修改等操作 ...

  9. linkin大话数据结构--Map

    Map 映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value.Map里的key不允许重复.通过key总能找到唯一的value与之对应.Map里的key集存储方式和对应的Se ...

随机推荐

  1. Ubuntu 安装Appium

    1.安装node apt-get install node.js 2.安装npm apt-get install npm 3.安装cnpm npm install -g cnpm 创建链接:ln -s ...

  2. 【NOIP2012】疫情传递

    题解 这题是真的烦... 越来越心疼2012年的dalao们了[不过好像dalao们都不需要本蒟蒻的心疼2333] 其实这题还有点半懂不懂... 所以把洛谷上一个比较好的题解粘过来记忆一下233 1. ...

  3. 从Unity中的Attribute到AOP(三)

    上一篇我们对系统的Attributes进行了MSIL代码的查看,了解到了其本质就是一个类的构造函数.本章我们将编写自己的Attributes. 首先我们定义书的属性代码,如下: [AttributeU ...

  4. Zabbix实战-简易教程--动作(Actions)--自动注册

    一.概述 之前已经讲述了自动发现功能,自动注册和自动发现非常类似,但是比自动发现更精确.因为自动注册,是在Agent上自定义元数据,然后Agent将元数据发送给server进行匹配,如果匹配一致,则进 ...

  5. redis4.0 集群,jedis客户端连接配置

    使用jedis 2.9.0连接,异常信息: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but n ...

  6. python对pywifi模块的认识

    pywifi是一个用来搞wifi的模块 下一章我们将用他破解wifi密码 pywifi安装 pip install pywifi 下列代码判断是否有无限网卡 import pywifi import ...

  7. bzoj4332;vijos1955:JSOI2012 分零食

    描述 这里是欢乐的进香河,这里是欢乐的幼儿园. 今天是2月14日,星期二.在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着.校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们.听到这个消息,所有同 ...

  8. the method of validate slow

  9. 再起航,我的学习笔记之JavaScript设计模式29(节流模式)

    节流模式 概念介绍 节流模式(Throttler): 对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能. 优化滚动事件 有的时候我们再为滚动条添加动画的时候,会发现滚动条不停的 ...

  10. [国嵌笔记][033-034][设置svc模式]

    [设置svc模式] 设置CPU为SVC模式 1.因为初始化系统需要有很高的权限,SVC模式具有该权限,所以首先要使系统工作在SVC(0b10011)模式 2.设置cprs为0xd3(0b1101001 ...