<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    [Jakarta Commons筆記] Commons Collections - Buffer組

    來看Buffer組。

     

    Buffer

    BlockingBuffer

    BoundedFifoBuffer

    PriorityBuffer

    UnboundedFifoBuffer

    BufferUtils

     

    Buffer是定義在org.apache.commons.collections包下面的接口,用于表示按一定順序除去成員對象的collection如隊列等。具體的實現類在org.apache.commons.collections.buffer包下可以找到。

     

    BufferUtils提供很多靜態/工具方法裝飾現有的Buffer實例,如將其裝飾成BlockingBuffer、執行類型檢查的TypedBuffer、或者不可改變的UnmodifiableBuffer等等。

     

    最簡單直接的Buffer實現類是UnboundedFifoBuffer,提供先進先出的大小可變的隊列。而BoundedFifoBuffer則是對其大小進行了限制,是固定大小的先進先出隊列。BlockingBuffer要在多線程的環境中才能體現出它的價值,尤其是當我們需要實現某種流水線時這個BlockingBuffer很有用:每個流水線上的組件從上游的BlockingBuffer獲取數據,處理后放到下一個BlockingBuffer中依次傳遞。BlockingBuffer的核心特色通俗點說就是如果你向它要東西,而它暫時還沒有的話,你可以一直等待直至拿到為止。PriorityBuffer則提供比一般的先進先出Buffer更強的控制力:我們可以自定義Comparator給它,告訴它怎么判定它的成員的先后順序,優先級最高的最先走。

     

    為了方便和清晰的需要,我在這里只舉一個BoundedFifoBuffer,包裝成TypedBuffer,看看在具體的代碼中通常如何使用Buffer:(還是沿用上次的Book類)

     

    package sean.study.commons.collections;

     

    import java.util.Iterator;

     

    import org.apache.commons.collections.Buffer;

    import org.apache.commons.collections.BufferUtils;

    import org.apache.commons.collections.buffer.BoundedFifoBuffer;

    import org.apache.commons.lang.StringUtils;

     

    public class BufferUsage {

     

        public static void main(String[] args) {

            demoBufferUsage();

        }

     

        public static void demoBufferUsage() {

     

            System.out.println(StringUtils.center(" demoBagUsage ", 40, "="));

     

            // data setup

            Book book1 = new Book("Refactoring Workbook", "7-5083-2208-8", 29.8);

            Book book2 = new Book("J2EE Design Patterns", "7-5083-3099-4", 45);

            Book book3 = new Book("Agile Software Development", "7-5083-1503-0", 59);

            Book book4 = new Book("Professional JSP", "7-5053-8005-2", 100);

     

            // create a Buffer

            Buffer buffer =

                BufferUtils.typedBuffer(new BoundedFifoBuffer(3), Book.class);

            buffer.add(book1);

            buffer.add(book2);

            buffer.add(book3);

            Book removed = (Book) buffer.remove();

            System.out.println("Removed:");

            System.out.println(removed);

            buffer.add(book4);

           

            // get items in buffer

            for (int i = 0; i < 3; i++) {

                System.out.println(buffer.get());

                buffer.remove();

            }

     

            System.out.println(StringUtils.repeat("=", 40));

     

        }

     

    }

     

    以下是運行結果:

     

    ============= demoBagUsage =============

    Removed:

    sean.study.commons.collections.Book@e09713[

      name=Refactoring Workbook

      ISBN=7-5083-2208-8

      retailPrice=29.8

    ]

    Remaining:

    sean.study.commons.collections.Book@e09713[

      name=J2EE Design Patterns

      ISBN=7-5083-3099-4

      retailPrice=45.0

    ]

    sean.study.commons.collections.Book@47b480[

      name=Agile Software Development

      ISBN=7-5083-1503-0

      retailPrice=59.0

    ]

    sean.study.commons.collections.Book@19b49e6[

      name=Professional JSP

      ISBN=7-5053-8005-2

      retailPrice=100.0

    ]

    ========================================

     

    我們可以看到,Bufferaddremove方法分別添加新成員和刪除最先加入的成員。由于我們的Buffer定義為只能裝3Book類的實例,所以不論我們試圖加入其他類型的對象,或者加入超過3個,操作都將失敗。如果我們在遍歷時使用get()而不調用remove(),那么我們將得到3個相同的拷貝,而這正是我們期望的FIFO隊列的行為。假如你需要遍歷并保留數據,可以使用標準的Iterator機制。

     

    posted on 2006-03-10 23:12 Vincent.Chen 閱讀(219) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 蜜臀AV免费一区二区三区| 久久久免费的精品| 最新69国产成人精品免费视频动漫 | 丰满人妻一区二区三区免费视频| 四虎免费久久影院| 免费无码午夜福利片69| 亚洲精品97久久中文字幕无码| 免费人人潮人人爽一区二区| 中国亚洲女人69内射少妇| 91视频免费观看高清观看完整| 亚洲精品无码鲁网中文电影| 免费国产污网站在线观看| 亚洲av不卡一区二区三区| 久久精品免费一区二区| 色在线亚洲视频www| 国产精品自在自线免费观看| 免费无遮挡无遮羞在线看| 亚洲日韩国产精品第一页一区| 久久午夜夜伦鲁鲁片无码免费| 亚洲成a人片在线观看播放| 野花高清在线电影观看免费视频| 亚洲精品久久无码| 亚洲精品无码激情AV| 无码日韩精品一区二区免费暖暖 | 在线综合亚洲欧洲综合网站| 狠狠久久永久免费观看| 成年大片免费高清在线看黄| 亚洲爆乳精品无码一区二区三区| 最近中文字幕无免费| 亚洲AV永久无码精品网站在线观看| 亚洲国产精品成人| 96免费精品视频在线观看| 亚洲精品乱码久久久久久蜜桃图片| 中国亚洲女人69内射少妇| 在线视频免费观看高清| 精品国产福利尤物免费| 国产色在线|亚洲| 亚洲日本一区二区三区在线| 在线v片免费观看视频| 中文字幕在线免费播放| 亚洲综合一区二区三区四区五区|