queue 队列测试

来源:互联网 发布:win10vc6.0软件下载 编辑:程序博客网 时间:2024/05/29 16:55

队列接口指出可以在队列的尾部添加元素,在队列的头部删除元素,并且可以查找队列中元素的个数。当需要收集队列,并按照”先进先出”的规则检索对象时就应该使用队列。

队列实现方式,通常有两种方式:一种是使用循环数组;另一种是使用链表。每个实现都可以通过一个实现了Queue接口的类表示。如果需要一个循环数组队列,就可以使用ArrayDeque类,如果需要一个链表队列,就直接使用LinkedList类。

实现方式的效率,循环数组要比链表更高效,因此多数人优先选择循环数组,然而,通常这样做也需要付出一定的代价。

循环数组是一个有界集合,即容量有限。如果程序中要搜集的对象数量没有上限,就最好使用链表来实现。

代码块

package yu.bai.collection;import org.junit.Test;import java.util.LinkedList;import java.util.Queue;import org.junit.Before;/** * 队列测试:实现类使用LinkedList */public class TestQuene {    // 定义一个队列    Queue<String> queue;    @Before    public void before() {        // 实例化队列变量        queue = new LinkedList<String>();        // add方法向队列中添加元素,返回布尔值,add方法添加失败时会抛异常,不推荐使用        // queue.add("1");        // queue.add("2");        // queue.add("3");        // queue.add("4");        // queue.add("5");        // offer方法向队列中添加元素,返回布尔值        queue.offer("a");        queue.offer("b");        queue.offer("c");        queue.offer("d");        queue.offer("e");    }    // poll方法移除队列首个元素并返回,若队列为空,返回null    @Test    public void test1() {        // 弹出元素        String pollEle = queue.poll(); // 先进先出,弹出了a        System.out.println(pollEle); // a        System.out.println(queue); // [b, c, d, e]    }    // remove方法移除首个元素并返回,若队列为空,会抛出异常:NoSuchElementException,不推荐使用    @Test    public void test2() {        // 弹出元素        String remove = queue.remove(); // 先进先出,弹出了a        System.out.println(remove); // a        System.out.println(queue); // [b, c, d, e]    }    // peek方法返回队列首个元素,但不移除,若队列为空,返回null    @Test    public void test3() {        // 查看首个元素        String peek = queue.peek(); // 首个元素是a,最先加入        System.out.println(peek); // a        System.out.println(queue); // [a, b, c, d, e]    }    // element方法返回队列的头元素,但不移除,若队列为空,会抛出异常:NoSuchElementException,不推荐使用    @Test    public void test4() {        // 查看首个元素        String element = queue.element();        System.out.println(element); // a        System.out.println(queue); // [a, b, c, d, e]    }}
  1. 每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null或false,具体取决于操作)。
  2. 队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。下表显示了jdk1.5中的阻塞队列的操作:
    add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常

    remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

    element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

    offer 添加一个元素并返回true 如果队列已满,则返回false

    poll 移除并返问队列头部的元素 如果队列为空,则返回null

    peek 返回队列头部的元素 如果队列为空,则返回null

    put 添加一个元素 如果队列满,则阻塞

    take 移除并返回队列头部的元素 如果队列为空,则阻塞

    remove、element、offer 、poll、peek 其实是属于Queue接口。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发掉的厉害怎么办怎么拯救掉头发 头发可以种植吗 如果是秃顶怎么办 染头发把手指甲染黑了怎么办 怀孕两个月下体流褐色分泌物怎么办 头发总是大把大把的得掉 怎么办 严重脱发怎么办去问南宁肤康 脱发严重怎么办去看南宁肤康 前额头发少怎么办 如何使头发增多 生完宝宝头发一把一把的掉怎么办 生完宝宝后头发掉的厉害怎么办 生完宝宝头发掉的厉害怎么办 生了小孩后头发掉很多怎么办 生了孩子头发掉的很厉害怎么办 母乳期头发掉的很厉害怎么办 宝宝吃母乳头发掉的厉害怎么办 头发油腻头皮屑多还掉头发怎么办 头发剪了中分刘海弯了怎么办 头发掉了长出来的头发很细怎么办? 头皮损伤毛囊怎么办还会长头发吗 一岁宝宝头发稀少怎么办能刮光头么 前编头发长了怎么办怎么梳理 九个月宝宝头发稀少不长怎么办 前牙吃饭咬合很深吃饭就痛怎么办 吃了甜的冷的就牙疼怎么办 吃热的凉的甜的牙疼怎么办 头发太细了想让头发变粗点怎么办 我的头发又少又很油该怎么办 头发油掉发头顶头发稀疏怎么办 我的头发天生就少又细怎么办 头发越来越少怎么办 用什么好呢 头发油掉头发怎么办吃什么药好 生完孩子三个月掉头发很厉害怎么办 电夹板夹头发现在掉头发怎么办 刚剪完的头发前面短后面长怎么办 头发太多太厚怎么办_百度经验 米诺地尔搽剂喷在头皮上痛怎么办 米诺地尔擦了头皮痒怎么办 头发又细又少一天不洗就油怎么办 头又尖头发又细又少不知怎么办 蘑菇头发型留长尴尬期怎么办 月经期间洗了下头量很少了怎么办