定義前端
隊列是一種特殊的線性表,先進先出,它只容許在表的前端進行刪除,在表的後端進行插入。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();