1. 程式人生 > >JAVA Queue的簡單實現

JAVA Queue的簡單實現

佇列是資料結構中比較重要的一種型別,他支援先進先出,跟生活中的排隊一樣,這一點剛好和Stack(棧)相反。

Android中最熟悉的莫過於MessageQueue了,諾!就像下圖這張圖一樣,從前面拿出來後面塞進去,android中有一個死迴圈在不停地搞這個事。

那麼java中怎麼玩這個呢,我們來寫個簡單的demo,等以後技術好了再來擴充套件一下。

public class TestQueue {
    
    public static void main(String[] args) {
        //例項化一個佇列
        Queue<String> queue = new LinkedList<>();
        for (int i = 0; i < 100; i++) {
            //新增一個元素到佇列裡面
            queue.offer(i+"");
            //我們在這裡for each列印佇列裡面的元素
            for (String string : queue) {
                System.out.println("列印:"+string);
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }
            //獲取並remove佇列的第一個元素
            queue.poll();
        }
        //最後將佇列的size列印一下
        System.out.println(queue.size());
        
    }

}
最終打印出來的size為0,那就說明我們塞進去的元素已經全部remove掉了。

下面我們來熟悉一下Queue的幾個常用的方法。

插入:add()  /  offer()
這裡add和offer都是尾部新增,區別就是add新增失敗(比如:queue滿了)會丟擲異常,而offer即使失敗也不會掛掉,只是返回false。

移除: remove()  /  poll()
都是移除佇列的第一個元素,區別在於當佇列為空時,remove()丟擲異常,而poll()返回一個空,所以這裡我們得注意了,如果移除元素用的是poll()函式,那麼千萬的不要往佇列裡面插入null,否則你無法判斷返回的null是不是佇列為空還是獲取的值為nul。

Examine:element()  /  peek()

這兩個函式都是獲取佇列的第一個元素,但是不會移除元素,同樣的當佇列為空時element()丟擲異常,而peek()返回一個null。

這裡感謝老司機張拭心得文章:

相關推薦

java簡單實現數據庫連接池

zed cal lean jdbc stat eof LEDE import thread 一直在想java事務是怎麽實現的,在原聲jdbc的時候級別下,我們可以通過關掉autocommit 然後再手動commit。但是項目開發中基本上是看不見conection的。所以自己

負載均衡演算法---Java簡單實現(1)

最近,大夥常在談論什麼負載均衡,什麼伺服器的,而自己對於這一塊也是不太理解深入模糊,然後就去看書學習,印證自己的想法。下面是自己的一些總結吧:   比較常用的負載均衡演算法,有下面的這一些: (1)輪詢(其實就是迴圈) (2)隨機 (3)hash (4)加權輪詢

基於《仙劍奇俠傳柔情版》利用Java簡單實現(一)

基於《仙劍奇俠傳柔情版》利用Java的簡單實現(一) 2018-12-01 23:55:36   by Louis  一,新建一個類GameFrame.class,具體程式碼如下: package firstDemo; import javax.swing.JF

《仙劍奇俠傳柔情版》Java簡單實現(二)

基於《仙劍奇俠傳柔情版》Java的簡單實現(二) 2018-12-02 by louis     需要上次的GameFrame.class中視窗框架承載:https://www.cnblogs.com/louis6575/p/10051873.html 當時沒有學過JButt

java簡單實現Log列印和生成日誌檔案

導包 1.commons-logging.jar包 下載 2.log4j.jar包 下載 配置log4j 1.在src根目錄下建立一個log4j.properties檔案。 檔案全部內容如下:   log4j.rootLogger=CONSOLE,stdout

java簡單實現cglib動態代理。

Cglib是動態代理的一種實現方式,用來代理普通的javaBean, /** * 實現MethodInterceptor * @author MyComputer * */ public class CGLibProxy implements MethodInt

Java servlet 簡單實現http檔案下載斷點續傳功能

斷點續傳,聽上去似乎是個比較高階的話題,本文只講述一下http版的斷點續傳,其他協議的大家可以自行研究。 http協議中,服務端實現斷點續傳首先需要讀取客戶端傳送的Range頭資訊,比如“Range: bytes=12583394-”這個就是指原來正在下載的檔案需要從第12

訊息佇列Java簡單實現

此文章是剛畢業的時候比較懵懂寫的,實際上不可稱之為訊息佇列,等我有空了會更新一篇關於主流mq的文章,謝謝包容(20171123) 今天看到我們的招聘資訊有對訊息佇列有要求,然後就思索了一翻,網上一搜一大堆。 我可以舉個小例子先說明應用場景 假設你的伺服器每分鐘的處理量為2

JAVA簡單實現一個阻塞任務佇列

package p18.juc; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownL

什麼是socket?什麼是socket的長、短連線?java如何簡單實現socket客戶端和伺服器?

*socket就是套接字,是一種通訊方式!採用這種方式可以實現客戶端和伺服器之間的通訊! 百度百科的解釋:        Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通訊機制,取後一種意思。通常也稱作"套接字",用於描述IP地址和埠,是一個通訊鏈的控

java分散式簡單實現

案例:文章推薦 論壇進入文章頁面後,顯示一個推薦列表:看過這篇文章的人還看過哪些文章,包含列為文章article、點選數count。 可能有很好很簡單的解決辦法,但是到最後再講。 傳統的方法是:建一張表,欄位有article和user。每點選一次,增加一條記錄。一個大論壇幾

java LinkedList簡單實現

時間:2018/7/27 簡單是實現了LinkedList的幾個方法,還是JAVA好啊 ,沒有指標 就是對連結串列的一些簡單操作 package c11; public class CopyLinkedList { private Node first;

java簡單實現LRUCache

import java.util.LinkedHashMap; import java.util.Map; public LRUCache<K, V> extends LinkedHashMap<K, V> { priva

JAVA Queue簡單實現

佇列是資料結構中比較重要的一種型別,他支援先進先出,跟生活中的排隊一樣,這一點剛好和Stack(棧)相反。 Android中最熟悉的莫過於MessageQueue了,諾!就像下圖這張圖一樣,從前面拿出來後面塞進去,android中有一個死迴圈在不停地搞這個事。 那麼jav

對稱加密詳解,以及JAVA簡單實現

turn bsp 十進制 stat mage 需要 對稱密鑰 else ges (原) 常用的加密有3種 1、正向加密,如MD5,加密後密文固定,目前還沒辦法破解,但是可以能過數據庫撞庫有一定概率找到,不過現在一般用這種方式加密都會加上鹽值。 2、對稱加密,通過一個固定

Java web文件服務器的簡單實現

是否 auth cor multi 同步 登錄驗證 stp while break 我們公司在做一個在線考試平臺,平臺在發布文章、編輯試題時需要將文章生成的html文檔以及題中的圖片上傳到一個專門文件服務器,然後再界面中使用http鏈接上傳的文件。 基於這個考慮,需要實現一

java倒計時三種簡單實現方式

idt 使用 instance too rgs 設置 private block ace 寫完js倒計時,突然想用java實現倒計時,寫了三種實現方式 一:設置時長的倒計時; 二:設置時間戳的倒計時; 三:使用java.util.Timer類實現的時間戳倒計時 代碼如下:

幾種簡單的負載均衡算法及其Java代碼實現

hsb p12 vld tar www. 簡單的 sin all .com jdsbuy肇岡唾氈瀉節http://www.docin.com/app/user/userinfo?userid=179258715a4cqu2瘟萄優歐壹讜http://huiyi.docin.c

簡單實現java線程池

隊列 imp trac poi resize ren .com lsi urn 使用多線程以及線程池的意義無需多說,要想掌握線程池,最好的方法還是自己手動去實現。 一、實現思路                  (網絡盜圖) 總的來說,所有的任務在Block

java連接mysql簡單實現

連接mysql 數據庫 創建過程 tab 地址 databases def eat style 因為最近要做一個涉及到數據庫的具體應用,選擇數據庫mysql,用java連接mysql做一個學生信息管理系統的簡單版本。 工具:eclipse,jdbc,mysql 如上