首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    栈队列详解

    ​ 对于java语言来说,如果需要实现栈队列的数据结构,我们已经不需要自己手动实现了,java内部已经帮我们实现好了栈和队列,而且在其基础上又有了优化 ​ 当需要使用栈时,Java已不推荐使用Stack...,而是推荐使用更高效的ArrayDeque;既然Queue只是一个接口,当需要使用队列时也就首选ArrayDeque了(次选是LinkedList) 队列(先进先出) 对于栈来说,java内部封装Stack...插入完成后再检查空间,如果空间已经用光,则调用doubleCapacity()进行扩容。...由于ArrayDeque中不允许放入null,当elements[head] == null时,意味着容器为空。...pollFirst() { int h = head; E result = elements[head]; if (result == null)//null值意味着deque为空

    6910

    【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现

    28 * 而不是出现异常的情况,例如在容量固定(有界)的队列中 29 * NullPointerException:data==null时抛出 30 * @param data...front=(front+1)%size;//队头下标 rear=(rear+1)%size; front为队头元素的下标,rear则指向下一个入队元素的下标 当front=rear时,我们约定队列为空...63 * 而不是出现异常的情况,例如在容量固定(有界)的队列中 64 * NullPointerException:data==null时抛出 65 * IllegalArgumentException...出队操作时,若队列不为空获取队头结点元素,并删除队头结点元素,更新front指针的指向为front=front.next 入队操作时,使插入元素的结点在rear之后并更新rear指针指向新插入元素。...当第一个元素入队或者最后一个元素出队时,同时更新front指针和rear指针的指向。 这一系列过程如下图所示: ?

    1.2K70

    NullPointerException : Attempt to invoke a method on a null object reference 完美解决方法

    这个错误通常会出现在我们试图调用一个尚未初始化或被赋值为null的对象的方法时。本文将通过深入探讨导致这个错误的原因,并结合代码示例,帮助大家更好地理解如何避免和处理NPE。⚙️ 正文内容 1....{ // 类定义 } 当你尝试在null对象上调用方法或访问其字段时,Java虚拟机(JVM)将会抛出这个异常。...例如: Person person = null; person.getName(); // 抛出NullPointerException 2.2 遍历空数组或集合 在遍历数组或集合时,没有检查是否为...} 2.3 操作返回null的函数结果 当函数返回值可能为null时,直接操作其结果也是引发NPE的常见场景。...表格总结 错误原因 解决方案 调用未初始化的对象方法 在调用前检查是否为null 遍历空数组或集合 在循环前确认集合不为空 操作返回null的函数结果 使用Optional类包装可能为null的返回值

    18410

    最全的集合干货送给大家

    例如,一些实现类禁止空元素,一些则在元素类型上有一些限制。试图添加不合格的元素会引发未经检查的异常。特别是空指针异常和类型转换异常。尝试查询不合格元素的 存在可能会抛出异常,或者可能返回 false。...试图添加不合规定的元素会抛出未经检查的异常,比如 NullPointerException 和 ClassCastException。...例如,一些实现禁止空元素,一些实现对元素类型有严格对限制。尝试添加一些不合法的元素会抛出未经检查的异常。特别是 NullPointerException 或者 ClassCastException 。...该类也支持 fail-fast 机制 AbstractQueue 抽象类 这个类是 Queue 接口的骨干实现,当实现不允许为 null 元素时,使用此类中的实现是比较合适的。...尝试插入不合格的键或值会引发未经检查的异常,比如 NullPointerException 或者 ClassCastException 尝试查询不合格的 key 或 value 也可能抛出异常,或者可能返回

    63610

    Java 集合深入理解(9):Queue 队列

    因此,当 rear > font 时,队列中元素个数 = rear - font; 当 rear 时,队列中元素分为两部分: size - font 和 rear ,也就是 rear +...添加、删除、查询这些个操作都提供了两种形式,其中一种在操作失败时直接抛出异常,而另一种则返回一个特殊的值: ?...NullPointerException; 不同之处在于 add() 方法在添加失败(比如队列已满)时会报 一些运行时错误 错;而 offer() 方法即使在添加失败时也不会奔溃,只会返回 false...2.remove(), poll() 删除并返回头部: E remove(); E poll(); 当队列为空时 remove() 方法会报 NoSuchElementException 错; 而 poll...3.element(), peek() 获取但不删除: E element(); E peek(); 当队列为空时 element() 抛出异常;peek() 不会奔溃,只会返回 null。

    72380

    并发编程之queue

    队列中没有元素时,称为空队列。...阻塞队列的操作可以根据它们的响应方式分为以下三类:aad、removee和element操作在你试图为一个已满的队列增加元素或从空队列取得元素时 抛出异常。...当然,在多线程程序中,队列在任何时间都可能变成满的或空的,所以你可能想使用offer、poll、peek方法。这些方法在无法完成任务时 只是给出一个出错示而不会抛出异常。...put方法在队列满时阻塞,take方法在队列空时阻塞。...使用非阻塞队列,虽然能即时返回结果(消费结果),但必须自行编码解决返回为空的情况处理(以及消费重试等问题)。 另外他们都是线程安全(除了linkedList)的,不用考虑线程同步问题。

    84070

    NullPointerException:Attempt to Invoke a Method on a Null Object Reference

    在Java中,null是一个特殊的字面量,它表示一个对象的“缺失”或“空值”。当一个变量被初始化为null时,它并不指向任何对象的内存位置。...对象被显式设置为null:在代码中某处,变量被设置为null,后续操作未进行空值检查。 依赖外部输入:使用外部输入或参数时,未进行充分的空值检查。 ️...NPE,避免程序崩溃 当必须处理可能出现的NPE时 避免显式赋值null 避免将变量显式设置为null,使用默认值或空对象 全局代码优化策略 ❓ QA环节 Q: NPE在大型项目中常见吗?...对象被显式设置为null:在代码中某处,变量被设置为null,后续操作未进行空值检查。 依赖外部输入:使用外部输入或参数时,未进行充分的空值检查。 ️...NPE,避免程序崩溃 当必须处理可能出现的NPE时 避免显式赋值null 避免将变量显式设置为null,使用默认值或空对象 全局代码优化策略 ❓ QA环节 Q: NPE在大型项目中常见吗?

    13410

    LinkedList源码分析(基于Java8)内部结构构造方法添加2检索3删除4迭代器5 例子6总结

    f.prev = newNode; size++; modCount++; } 在头节点插入一个节点使新节点成为新节点,但是和linkLast一样需要注意当链表为空时...null : f.item; } 当链表为空时,peek()和peekFirst()方法返回null 2.1.3 获得位置为size-1的尾节点数据 获得尾节点数据的方法有 getLast()...remove(Object o),一次只会删除一个匹配的对象 按照指定位置删除 删除任意位置的对象 E remove(int index),当index越界时会抛出异常 删除头节点位置的对象 在链表为空时抛出异常...E remove()、E removeFirst()、E pop() 在链表为空时返回null E poll()、E pollFirst() 删除尾节点位置的对象 在链表为空时抛出异常 E removeLast...} //弹出数据,在Stack为空时将抛出异常 public E pop() { return linkedList.pop(); } //检索栈顶数据

    95740

    一道算术题:ArrayDeque + ArrayList = LinkedList

    1.1 Queue 接口 Queue 的 API 可以分为 2 类,区别在于方法的拒绝策略上: 抛异常: 向空队列取数据,会抛出 NoSuchElementException 异常; 向容量满的队列加数据...因为当数组的空间不足(top == n)时,就需要扩容和搬运数据来容纳新的数据。此时,时间复杂度就从 O(1) 退化到 O(n)。...对于入队而言,当 tail == n 时,就需要扩容和搬运数据来容纳新的数据,我们用均摊分析法得出均摊时间复杂度依然是 O(1),就不重复了。...我们在逻辑上将数组的首尾相连,当 tail == n 时,如果数组头部还有空闲位置,我们就把 tail 指针调整到数组头部,在数组头部添加数据。...因为 null 通常会作为一个特殊值来判断队列是否为空。

    50320

    【Java】已解决java.lang.NullPointerException异常

    一、问题背景 在Java编程中,java.lang.NullPointerException(空指针异常)是一种常见的运行时异常。当应用程序试图在需要对象的地方使用null时,就会抛出这个异常。...对象被设置为null:在程序的某个地方,对象被显式地设置为null,随后又被使用。 方法返回null:一个方法被期望返回一个对象,但实际上返回了null,而调用者没有检查这一点。...数组越界:虽然这不是直接导致NullPointerException的原因,但数组越界可能间接导致对象被错误地设置为null。...检查返回值:如果方法可能返回null,在调用该方法后检查返回值是否为null。...避免链式调用:当对象可能为null时,避免进行链式调用,因为这可能会导致在调用链中较早的位置抛出NullPointerException。

    80110

    转移线程的时候要判断线程是否为空遍历线程的容器会抛出ConcurrentM

    Executor管理器将提交上来的线程放入线程等待区(一个LinkedList),当线程执行区中有空位时,控制线程1就会将线程等待区中的线程移除转移到线程执行区(一个LinkedList)。...当执行区中的线程跑完了之后,这个线程对象仍然是在执行区中存在的,所以如果不把结束的线程移除出去,那么提交任务几毫秒后,执行区就会爆满了,不清理的话,等待区的线程也进不来 ---- 几个需要注意的地方 转移线程的时候要判断线程是否为空...因为这样子,空线程在执行区中start和判断这个线程是否结束的时候(getState()==Thread.State.TERMINATED),会抛出NullPointerException空指针异常,会无缘无故占领了执行区的空间...,抛出异常和处理异常也会浪费时间 而且不知道为什么,如果不判断的话,会发生阻塞 我想了想,想到了一个不靠谱的解释: 在主线程提交线程给executor之前,executor一直在把空的线程丢进执行区...API很粗暴的,只要循环体中或者迭代器中,遍历的是Collection的时候,就会直接抛出这个异常 所以当开发的时候,没有对容器线程做出修改,那么直接处理忽视掉这个异常吧 线程一定要适当的yield

    1.1K60

    Java精讲 | 45张图庖丁解牛18种Queue,你知道几种?

    (3)阻塞的插入:当队列满时,队列会阻塞插入元素的线程,直到队列不满。 (4)阻塞的移除:当队列为空,获取元素的线程会等待队列变为非空。...- 添加的元素某些属性不匹配 add方法特别之处用于添加失败时抛出异常,共有四种异常: offer方法特别之处用于添加失败时只返回false put方法特别之处用于当阻塞队列满时,生产者如果往队列里put...null take方法特别之处用于当阻塞队列为空时,消费者线程如果从队列里面移除元素,则队列会一直阻塞消费者线程,直到队列不为空 poll超时方法特别之处用于当阻塞队列空时,消费者如果从队列里面删除元素...,则队列会一直阻塞消费者线程,如果超过了指定时间,消费者线程会退出,并返回null 检查有两种方法: element、peek element方法用于检测头部元素的存在性,如果队列为空,则抛出异常,否则返回头部元素...队列慢时插入操作被阻塞,队列空时,移除操作被阻塞。 默认和最大长度为Integer.MAX_VALUE,相当于无界(值非常大:2^31-1)。

    1.4K30
    领券