java中的AbstractQueue

一、概述

类结构:

java.lang.Object
  java.util.AbstractCollection<E>
      java.util.AbstractQueue<E>
类型参数:
E - 此 collection 中所保存元素的类型声明:public abstract class
AbstractQueue<E> extends
AbstractCollection<E> implements
Queue<E>

此类提供某些 Queue 操作的骨干实现。此类中的实现适用于基本实现 允许包含 null 元素时。addremove
element 方法分别基于 offerpollpeek 方法,但是它们通过抛出异常而不是返回 falsenull 来指示失败。

扩展此类的 Queue 实现至少必须定义一个不允许插入 null 元素的 Queue.offer(E) 方法,该方法以及 Queue.peek()Queue.poll()Collection.size()
Collection.iterator() 都支持 Iterator.remove() 方法。通常还要重写其他方法。如果无法满足这些要求,那么可以转而考虑为 AbstractCollection 创建子类。

此类是 Java Collections Framework 的成员。

二、构造方法

protected AbstractQueue()  子类使用的构造方法。

三、方法详细
1、public boolean add(E e)  
将指定的元素插入到此队列中(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用空间,则抛出 IllegalStateException
如果 offer 成功,则此实现返回 true,否则抛出 IllegalStateException
指定者:
接口 Collection<E> 中的 add
指定者:
接口 Queue<E> 中的 add
覆盖:
AbstractCollection<E> 中的 add
参数:
e - 要添加的元素
返回:
true(根据 Collection.add(E) 的规定)
抛出:
IllegalStateException - 如果此时由于容量限制不能添加元素
ClassCastException - 如果指定元素的类不允许将该元素添加到此队列中
NullPointerException - 如果指定元素为 null 并且此队列不允许 null 元素
IllegalArgumentException - 如果此元素的某些属性不允许将该元素添加到此队列中
2、public E remove()
获取并移除此队列的头。此方法与 poll 唯一的不同在于:此队列为空时将抛出一个异常。 除非队列为空,否则此实现返回 poll 的结果。
指定者:
接口 Queue<E> 中的 remove
返回:
此队列的头
抛出:
NoSuchElementException - 如果此队列为空
3、public E element() 获取但不移除此队列的头。此方法与 peek 唯一的不同在于:此队列为空时将抛出一个异常。除非队列为空,否则此实现返回 peek 的结果。
指定者:
接口 Queue<E> 中的 element
返回:
此队列的头
抛出:
NoSuchElementException - 如果此队列为空
4、public void clear() 移除此队列中的所有元素。此调用返回后,队列将为空。此实现重复调用 poll,直到它返回 null 为止。
指定者:
接口 Collection<E> 中的 clear
覆盖:
AbstractCollection<E> 中的 clear
5、public boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此队列中。如果试图将某一队列 addAll 到该队列本身中,则会导致 IllegalArgumentException。此外,如果正在进行此操作时修改指定的 collection,则此操作的行为是不确定的。
此实现在指定的 collection 上进行迭代,并依次将迭代器返回的每一个元素添加到此队列中。在试图添加某一元素(尤其是 null 元素)时如果遇到了运行时异常,则可能导致在抛出相关异常时只成功地添加了某些元素。 
指定者:
接口 Collection<E> 中的 addAll
覆盖:
AbstractCollection<E> 中的 addAll
参数:
c - 包含要添加到此队列的元素的 collection
返回:
如果此队列由于调用而发生更改,则返回 true
抛出:
ClassCastException - 如果指定 collection 元素的类不允许将该元素添加到此队列中
NullPointerException - 如果指定 collection 包含一个 null 元素并且此队列不允许 null 元素,或者指定 collection 为 null
IllegalArgumentException - 如果指定 collection 元素的某些属性不允许将该元素添加到此队列中,或者指定 collection 是此队列
IllegalStateException - 如果此时由于插入限制无法添加所有元素


时间: 2024-11-13 10:47:38

java中的AbstractQueue的相关文章

java中的最重要的 集合框架

java.util这个重要的包包含大量的类和接口,支持很多的功能.例如,java.util具有能产生伪随机数的类,还包括可以管理日期和时间.观察事件.操作位集合.标记字符串.处理格式化数据等的类.java.util包也包含了Java中功能最强大的子系统之一:集合框架(collections Framework). 以下将分析集合框架中的接口和类. 集合接口: Collection 允许处理一组对象,它位于集合层次结构的项部 Deque 扩展Queue接口,以处理双端队列 List 扩展Colle

java中的三元运算符详解

最近在带领实习生中遇到很多新手问与三元运算符有关的java题目,多数为代码结果题,少数为应用题.鉴于很多资料上对于java三元运算的讲解过于简单,网上的资料与题目也不是很完善,对于结果答案分析不一,故在此总结,当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习. 什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值. 其示例代码如下:boolean a = 20 < 45 ? true : false

java中BigDecimal的学习

干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习. 最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉不能再拖了. BigDecimal,从名字来看就是进行大数运算的,不光这样,还广泛用于小数的精确运算. 当你接触到和钱有关的计算的时候,这个类还是很有用滴. 先来看一个例子 1 package com.tuhooo.bigdecimal; 2 3 /** 4 * Created by tuhooo

Java 中几个重要的关键字

Java中的关键字特别多,大致如下: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface native new static strictfp synchronized transient volatile 程序控制 break continue return do while if else for instanceof switch case default 异常

深入剖析Java中的装箱和拆箱

阅读目录 一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 回到顶部 一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成

JAVA中只有值传递

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:"引用传递!",并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟

Java中如何优雅正确的终止线程

Java中终止线程的方式主要有三种: 1.使用stop()方法,已被弃用.原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的"残疾"数据,不符合完整性,所以被废弃.So, forget it! 2.使用volatile标志位 看一个简单的例子: 首先,实现一个Runnable接口,在其中定义volatile标志位,在run()方法中使用标志位控制程序运行 public class MyRunnable i

Java中I/O流之数据流

Java 中的数据流: 对于某问题:将一个 long 类型的数据写到文件中,有办法吗?    转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换. 现在,Java 中的数据流能够很好的解决这个问题(不需要转换,直接写进去) 1. DataInputStream 与 DataOutputStream 分别继承自 InputStream.OutputStream, 它属于处理流,需要分别套接在 InputStream.OutputStream 类

java中Random随机种子使用

在java中,通过Random生成随机数时,如果设置随机种子,则相同的种子,产生的随机数相同.若不设置则每次随机的不同. Random rnd = new Random(); rnd.setSeed(10);//用于设置种子. rnd.nextInt();// 用于产生随机数. rnd.nextInt(10); // 产生(0-9)数字.