Queue中常用的element/peek,remove/poll,add/offer有什么不同


Queue中常用的element/peek,remove/poll,add/offer有什么不同

虽然ArrayList底层是数组,但是优化之后的增删操作依然不慢,这就使得LindedList的很少出现在我们视野当中。但是在涉及到Stack和Queue时候(主要是刷题时),LinkedList的还是很常见的,由于底层是双向链表,又实现了Deque接口,经常被繁多的方法搞得头晕,主要方法如下:
在这里插入图片描述
其中的接口Queue的element/peek,remove/poll,add/offer三对方法作用很相似,细微区别如下:

  • element()和peek()都是用于在队列的头部查询元素。其中element()在查空时会抛出NoSuchElementException异常,而peek()在查空时就会返回null(来人,上源码)。
    在这里插入图片描述
    在这里插入图片描述
    element()上面的注解:检索数据,但不删除此队列的头。这个方法与peek()的不同之处在于如果此队列为空它抛出一个NoSuchElementException异常。
    peek()上面注解:检索数据,但不删除此队列的头。当此队列为空时会返回null。
    我们来看看LinkedList中的方法实现是怎么写的:
    在这里插入图片描述
    在这里插入图片描述
  • remove()和poll()都是从队列中删除第一个元素。其中remove()在删空时会抛出NoSuchElementException异常,而poll()在删空时就会返回null(来人,上源码)。
    在这里插入图片描述
    在这里插入图片描述
    注解意思和LindedList中的具体实现都和element()/peek()差不多,这里就不再啰嗦了。
  • add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出IllegalStateException异常,而调用 offer() 方法会返回 false(来人,上源码)。
    在这里插入图片描述
    在这里插入图片描述
    add()上面的注解:如果不违反容量限制,可以将指定的元素插入到这个队列中并返回true,失败的话就抛出IllegalStateException异常。
    offer()上面注解:如果不违反容量限制,可以将指定的元素插入到这个队列中并返回true,失败的话就返回false。

第一次记录自己的学习笔记,如果您发现问题,欢迎指点。

猜你喜欢

转载自blog.csdn.net/qq_42647711/article/details/108409315
今日推荐