Queue

定义前端

队列是一种特殊的线性表,先进先出,它只容许在表的前端进行删除,在表的后端进行插入。LinkedList类实现了Queue接口,所以咱们能够把LinkedList当成Queue来用。java


简单一个小 Demo后端


public static Queue<String>  queueDemo(){
    Queue<String> queue = new LinkedList<String>();
    //添加元素
    queue.offer("f");
    queue.offer("r");
    queue.offer("o");
    queue.offer("z");
    queue.offer("e");
    queue.offer("n");
    //add()和remove()方法在失败的时候会抛出异常(不推荐)
    queue.add("redant");
    queue.remove("b");
    for(String q : queue){
        System.out.println("逐个遍历Queue中的元素:"+q);
    }
    System.out.println("删除队列中的第一个元素,poll:"+queue.poll());
    System.out.println("队列中的第一个元素,element:"+queue.element());
    System.out.println("队列中的第一个元素,peek:"+queue.peek());
    return queue;
}
    //一、Queue队列测试
Queue<String> sss =  QueueDemo.queueDemo();
 for(String q : sss){
     System.out.println(q);
 }

Queuedemo.png

说明app

add        增长一个元索                    若是队列已满,则抛出一个IIIegaISlabEepeplian异常
remove   移除并返回队列头部的元素    若是队列为空,则抛出一个NoSuchElementException异常
element  返回队列头部的元素             若是队列为空,则抛出一个NoSuchElementException异常
offer       添加一个元素并返回true       若是队列已满,则返回false
poll         移除并返问队列头部的元素    若是队列为空,则返回null
peek       返回队列头部的元素             若是队列为空,则返回null
put         添加一个元素                     若是队列满,则阻塞
take        移除并返回队列头部的元素     若是队列为空,则阻塞
ide

堆、栈、队列之间的区别是?测试

①堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对通常内存的访问没有区别。spa

②栈就是一个桶,后放进去的先拿出来,它下面原本有的东西要等它出来以后才能出来。(后进先出)线程

③队列只能在队头作删除操做,在队尾作插入操做.而栈只能在栈顶作插入和删除操做。(先进先出)orm


队列之ArrayBlockingQueue测试小demoblog

ArrayBlockingQueue:须要制定容量,可选择是否须要公平性,等待时间长的线程优先执行。

/**
 * 一辆家庭小轿车
 */
public static class FrozenCar{
    // 这辆车子,最多容纳5我的{包括司机}
    BlockingQueue<String> frozenCar = new ArrayBlockingQueue<String>(5);
    // 开始shungfeng车,拉人
    public void carrerPosal() throws InterruptedException{
        // put方法载入一我的,若frozenCar满了,等到frozenCar有位置
        frozenCar.put("pretty girl");
    }
    // 乘客到站,从frozenCar中下车
    public String consume() throws InterruptedException{
        // get方法取出一个乘客,若frozenCar为空,等到frozenCar有苹果为止
        String apple = frozenCar.take();
        return apple;
    }
    public int getPosalNumber(){
        return frozenCar.size();
    }
}
// 测试方法
public static void testFrozenCar() {
    // 买一辆车
    final FrozenCar frozencar = new FrozenCar();
    // 定义乘客
    class Producer implements Runnable {
        @Override
        public void run() {
            try {
                while (true) {
                    System.out.println("准备拉乘客:" + System.currentTimeMillis());
                    frozencar.carrerPosal();
                    System.out.println("乘客已上车:" + System.currentTimeMillis());
                    System.out.println("车上还有:"+frozencar.getPosalNumber()+"人");
                    Thread.sleep(1000);   // 休眠1秒
                }
            } catch (InterruptedException ex) {
            }
        }
    }
    // 定义乘客
    class Consumer implements Runnable {
        @Override
        public void run() {
            try {
                while (true) {
                    System.out.println("乘客要下车:" + System.currentTimeMillis());
                    frozencar.consume();
                    System.out.println("乘客已下车:" + System.currentTimeMillis());
                    System.out.println("车上还有:"+frozencar.getPosalNumber()+"人");
                    Thread.sleep(1000);// 休眠1s
                }
            } catch (InterruptedException ex) {
            }
        }
    }
    ExecutorService service = Executors.newCachedThreadPool();
    Producer producer = new Producer();
    Consumer consumer = new Consumer();
    service.submit(producer);
    service.submit(consumer);
    // 程序运行10s后,全部任务中止
    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
    }
    service.shutdownNow();
}
//二、ArrayBlockingQueue测试
QueueDemo.testFrozenCar();
相关文章
相关标签/搜索