精华内容
下载资源
问答
  • Java对列
    2021-02-12 17:53:38

    java 数据结构 队列的实现

    java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...

    Java实现树的遍历以及打印(递归,非递归)

    import java.util.LinkedList; import java.util.Stack; public class BinarySearchTree1

    Java并发指南11:解读 Java 阻塞队列 BlockingQueue

    解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...

    解读 java 并发队列 BlockingQueue

    点击添加图片描述(最多60个字)编辑 今天呢!灯塔君跟大家讲: 解读 java 并发队列 BlockingQueue 最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括 ...

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...

    lesson2:java阻塞队列的demo及源码分析

    本文向大家展示了java阻塞队列的使用场景.源码分析及特定场景下的使用方式.java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多 ...

    Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...

    Java中四种遍历List的方法

    package com.ietree.basic.collection.loop; import java.util.ArrayList; import java.util.Iterator; imp ...

    java 多维数组遍历

    java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.p ...

    MinerQueue.java 访问队列

    MinerQueue.java 访问队列 package com.iteye.injavawetrust.miner; import java.util.HashSet; import java.ut ...

    更多相关内容
  • java定时器+多线程(池)+java队列Demo
  • 队列实现,数据结构作业练习参考,Java实现,环境eclipes1.8
  • 队列监视器 使用 Java队列监视器
  • JAVA队列( Queue ) 详解

    万次阅读 多人点赞 2021-04-24 15:45:14
    什么是队列? 队列是一种特殊的线性表,遵循先入先...java队列特性 队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分; 阻塞和非阻塞 阻塞队列 入列(删除元素)时,如果元素数量超过队列总数......

    什么是队列?

          队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除;比如我们常用的 LinkedList 集合,它实现了Queue 接口,因此,我们可以理解为 LinkedList 就是一个队列;

    java队列特性

    队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分;

    阻塞和非阻塞

    阻塞队列
              入列(添加元素)时,如果元素数量超过队列总数,会进行等待(阻塞),待队列的中的元素出列后,元素数量未超过队列总数时,就会解除阻塞状态,进而可以继续入列;
              出列(删除元素)时,如果队列为空的情况下,也会进行等待(阻塞),待队列有值的时候即会解除阻塞状态,进而继续出列;
              阻塞队列的好处是可以防止队列容器溢出;只要满了就会进行阻塞等待;也就不存在溢出的情况;
              只要是阻塞队列,都是线程安全的;
              

    非阻塞队列
              不管出列还是入列,都不会进行阻塞,
              入列时,如果元素数量超过队列总数,则会抛出异常,
              出列时,如果队列为空,则取出空值;

    一般情况下,非阻塞式队列使用的比较少,一般都用阻塞式的对象比较多;阻塞和非阻塞队列在使用上的最大区别就是阻塞队列提供了以下2个方法:

    •     出队阻塞方法 : take()
    •     入队阻塞方法 : put()

    有界和无界

        有界:有界限,大小长度受限制
        无界:无限大小,其实说是无限大小,其实是有界限的,只不过超过界限时就会进行扩容,就行ArrayList 一样,在内部动态扩容
       

    单向链表和双向链表

    单向链表 : 每个元素中除了元素本身之外,还存储一个指针,这个指针指向下一个元素;

    双向链表 :除了元素本身之外,还有两个指针,一个指针指向前一个元素的地址,另一个指针指向后一个元素的地址;

    java 队列接口继承图

    队列常用方法

      add        增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
      remove   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
      element  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
      offer       添加一个元素并返回true       如果队列已满,则返回false
      poll         移除并返问队列头部的元素    如果队列为空,则返回null
      peek       返回队列头部的元素             如果队列为空,则返回null
      put         添加一个元素                      如果队列满,则阻塞
      take        移除并返回队列头部的元素     如果队列为空,则阻塞
           drainTo(list)   一次性取出队列所有元素

    知识点: remove、element、offer 、poll、peek 其实是属于Queue接口。 

    非阻塞队列

    1、ConcurrentLinkedQueue

      单向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全,内部基于节点实现

    2、ConcurrentLinkedDeque  

    双向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全    

    3、PriorityQueue

    内部基于数组实现,线程不安全的队列

    阻塞队列

    1、DelayQueue

    一个支持延时获取元素的无界阻塞队列

    2、LinkedTransferQueue

    一个由链表结构组成的无界阻塞队列。

    3、ArrayBlockingQueue

    有界队列,阻塞式,初始化时必须指定队列大小,且不可改变;,底层由数组实现;

    4、SynchronousQueue

    最多只能存储一个元素,每一个put操作必须等待一个take操作,否则不能继续添加元素

    5、PriorityBlockingQueue

    一个带优先级的队列,而不是先进先出队列。元素按优先级顺序被移除,而且它也是无界的,也就是没有容量上限,虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError 错误;

    展开全文
  • java队列实现(顺序队列、链式队列、循环队列)
  • Java队列Queue的使用

    千次阅读 2021-03-15 02:31:09
    一个队列基本上可以认为是一个先入先出(FIFO)的数据结构,队列和数组的主要区别就在于,我们在使用数组时,必须在前面就定义好数组的长度,这就有了很大的局限性,而队列的长度无需之前就设定好,这是队列优于数组的...

    首先我们需要知道使用队列是什么,以及使用队列的意义。

    一个队列基本上可以认为是一个先入先出(FIFO)的数据结构,队列和数组的主要区别就在于,我们在使用数组时,必须在前面就定义好数组的长度,这就有了很大的局限性,而队列的长度无需之前就设定好,这是队列优于数组的一点,不过队列只可以在前端进行删除操作,在末端进行增添操作。

    队列的使用目的就是,在一般情况下,如果是一些即时消息的处理,并且在处理时间很短的情况下是不需要使用队列的,但是如果消息处理比较浪费时间,这个时候有新的消息来了,就只能处于阻塞状态,造成用户等待,这个时候使用队列是很有必要的,或者想使用一个不确定数组长度的数组,我们可以用队列先保存起来,之后从头依次取出元素,再放入数组,也是队列使用的一种方法。在Java的并发包中已经提供了BlockingQueue的实现,比较常用的有ArrayBlockingQueue和LinkedBlockingQueue,前者是以数组的形式存储,后者则是以Node节点的链表形式存储。

    接下来介绍一些队列的具体操作

    add() 增添一个元素,如果队列已满就会抛出异常 new IllegalStateException("Queue full");

    remove() 直接移除队列头部的元素,如果队列为空,则抛出异常NoSuchElementException

    element()返回队列头部的元素,不移除,如果队列为空,则抛出异常NoSuchElementException

    offer()在队列末端增添一个元素并返回true,如果队列已满,则返回false

    poll() 取出并删除队列头部的元素,与remove方法在于它取出了头部元素并保存起来,当队列为空,返回null

    peek() 直接取出队列头部的元素,不删除

    put()往队列里插入元素,如果队列已满,则会一直等待队列为空插入新元素,或者线程中断抛出异常

    take()取出并删除队头的元素,当队列为空,则会一直等待知道队列有新元素可以取出,或者线程中断抛出异常

    3f83e485a82e66d6f9c3c5bed830f48d.png

    展开全文
  • Java优先队列的实现

    2018-10-31 17:14:16
    数据结构与算法第六章,优先队列,heap_maximum 返回优先队列的最大值 heap_extract_max 删除并返回最大值 max_heap_insert插入值为key的元素进优先队列中 。
  • 队列在计算机术语中使用queue,和list(排)其实是一个意思。队列也是一种数据结构,类似于栈,只是与栈相反,在队列中先...  下面用Java实现队列的基本功能(数组版)。 package cn.zhf.list; public class MyQueu
  • java队列实现入队push和出队pop

    千次阅读 2021-12-08 17:36:42
    什么是队列:凡是满足数据先进先出的数据结构都叫做队列。 数据一般存储在数组或链表中,所以实现队列可以用链表也可以用数组。 我们用最简单的数组来实现,队列模型如下图所示: 那我们所说的数组来实现就是...

    什么是队列:凡是满足数据先进先出的数据结构都叫做队列。

    数据一般存储在数组或链表中,所以实现队列可以用链表也可以用数组。

    我们用最简单的数组来实现,队列模型如下图所示:

    那我们所说的数组来实现就是队列是由数组定义的,让它来实现先入先出,后入后出:

     入队方法就是给数组增加元素,我们需要定义一个指针end,把指针指向队尾,每次添加一个元素就让end指针向后移,假如我们添加3个元素分别为7,2,9那添加后的队列如下图所示:

     那我们所说的出队是从队头输出,输出后就需要输出队头的下一个元素,所以我们需要再定义一个指针head,让它永远指向队头元素,等pop出队后就让它指向下一个元素,不用删除输出元素只需要指针后移,如下图:

     

     实现代码如下:

    先定义一个队列类Queue代码如下:

    public class Queue {
        //定义数组,用private修饰只能本类方法访问
    	private int[] arr=new int[10];
        //定义队头指针,方便出队后来记录下次出队元素
    	private int head;
        //定义队尾指针,方便入队后来记录下次入队位置
    	private int end;
        //定义入队方法,通过传参来添加元素
    	public void push(int val) {
            //定义扩容方法。如果数组满了就让它先扩大一倍否则会越界
    		if(end==arr.length) {
    			int[] brr=new int[arr.length*2];
    			for(int i=0;i<arr.length;i++) {
    				brr[i]=arr[i];
    			}
    			arr=brr;
    		}
            //向队尾添加元素并让指针后移
    		arr[end++]=val;
    	}
        //定义出队方法
    	public void pop() {
            //如果头指针和尾指针相遇说明没有元素可出队了,就让它结束
    		if(head==end) {
    			return;
    		}
            //打印出队头元素,并让它指针后移
    		System.out.println(arr[head++]);
    	}
    }
    

     定义一个测试类Test来测试这个队列:

    public class Test {
    	public static void main(String[] args) {
    		Queue queue=new Queue();
    		queue.push(1);
    		queue.push(2);
    		queue.push(3);
    		queue.push(4);
    		queue.push(5);
    		queue.push(6);
    		queue.pop();
    		queue.pop();
    		queue.pop();
    		queue.pop();
    		queue.pop();
    		queue.pop();
    		queue.pop();
    		queue.pop();
    		queue.pop();
    		queue.pop();
    	}
    }
    

    测试结果如下:

     

    展开全文
  • Java原型源码数据结构-优先级队列 Java中优先级队列实现的源代码。
  • java队列的使用

    千次阅读 2021-03-02 22:53:24
    1、继承LinkedBlockingQueue ...LinkedBlockingQueue不指定队列容量时,默认为Integer.MAX_VALUE,即无界队列,为了避免队列过大造成机器负载或者内存爆满,建议手动传一个队列的大小。LinkedBlock
  • Java队列实现

    万次阅读 多人点赞 2017-09-19 11:42:26
    一、队列简单介绍队列是一种常用的数据结构之一,与之前的栈类似,不过队列是“先进先出”。队列有队头(front)和队尾(rear),数据从队尾进入队列,从队头出队列,队头(front)指向队列的第一个数据,队尾(rear...
  • Java原型源码文章构建队列 文章“在C ++和Java之间建立快速队列”的源代码
  • java实现的任务队列

    2019-08-09 01:20:29
    NULL 博文链接:https://noddle0592.iteye.com/blog/2185620
  • java队列模拟实现

    2013-01-06 18:00:25
    这是一个java队列实现的全部工程文件,包含了所有代码,具体的设计文档在上传的另外文件中。这个工程能够实现所有队列的操作,运行没有问题。设计的是在应用程序上的基于界面的队列操作的实现。
  • java 队列方法详解

    千次阅读 2019-03-09 20:55:59
    一、队列支持的方法(Queue) throw exception return special value insert add 1、增加元素不能为null 2、其他异常,比如有界队列 offer ...
  • java队列中的offer、poll方法

    千次阅读 2021-08-16 13:49:58
    首先,这个方法所在的包是java.util.Queue offer boolean offer(Ee) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,...
  • java队列实现

    2015-07-14 16:23:01
    java实现队列执行任务,限制线程执行的个数
  • java队列(Queue)用法总结

    万次阅读 多人点赞 2018-11-30 19:05:56
    1.队列的特点 队列是一种比较特殊的线性结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列中最先插入的元素也将最先...
  • java 队列的使用(转载)

    万次阅读 2018-05-18 18:38:19
    先我们要知道使用队列的目的是什么?一般情况下,如果是一些及时消息的处理,并且处理时间很短的情况下是不需要使用队列的,直接阻塞式的方法调用就可以了。但是,如果在消息处理的时候特别费时间,这个时候如果有新...
  • JAVA面试题(Zookeeper、消息队列、分布式等最新的也有)
  • java队列——queue详细分析

    万次阅读 2018-11-07 10:42:02
    Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 ...1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口  内置的不阻塞队列: Prior...
  • 【Java】Java队列Queue使用详解

    万次阅读 多人点赞 2018-09-10 16:29:27
    Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了。Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。
  • BlockingQueue接口 – 阻塞队列2.1 ArrayBlockingQueue类(有界阻塞队列)2.2 LinkedBlockingQueue类(无界阻塞队列)3. 源码:BlockingQueue实现生产者消费者模式→ 输出结果截图 1. Queue接口 – 队列 public ...
  • java队列的链表实现

    千次阅读 2018-11-15 10:30:50
    * 队列接口 * &amp;lt;p&amp;gt; * 队列是一种先进先出的线性表 * 只能在表的一端进行插入,另一段进行删除 * 允许插入的一端叫队尾,允许删除的一端叫队头() * * * ps:还存在一种 双端队列 即队...
  • JAVA队列的增删改查

    千次阅读 2018-02-21 16:17:27
    1.创建队列的类package 队列; public class Node { private Node next;//指针指向 private Object data;//数据保存 public Node getNext() { return next; } public void setNext(Node next) { this.next ...
  • java队列Queue方法

    千次阅读 2017-05-28 21:49:52
    Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现。还有的适用于多线程的环境。...
  • Java队列的部分调用方法

    千次阅读 2020-06-02 14:41:52
    Java队列的部分调用方法 方法 作用 说明 add() 增加一个元素 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove() 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 706,537
精华内容 282,614
关键字:

Java对列