定义前端
队列是一种特殊的线性表,先进先出,它只容许在表的前端进行删除,在表的后端进行插入。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); }
说明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();