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

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

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

    Read Sean

    Read me, read Sean.
    posts - 508, comments - 655, trackbacks - 9, articles - 4

    [Jakarta Commons筆記] Commons Collections - Buffer組

    Posted on 2005-08-04 12:49 laogao 閱讀(2073) 評(píng)論(0)  編輯  收藏 所屬分類: On Java

     

    來看Buffer組。

     

    Buffer

    BlockingBuffer

    BoundedFifoBuffer

    PriorityBuffer

    UnboundedFifoBuffer

    BufferUtils

     

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

     

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

     

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

     

    為了方便和清晰的需要,我在這里只舉一個(gè)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));

     

        }

     

    }

     

    以下是運(yùn)行結(jié)果:

     

    ============= 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定義為只能裝3個(gè)Book類的實(shí)例,所以不論我們?cè)噲D加入其他類型的對(duì)象,或者加入超過3個(gè),操作都將失敗。如果我們?cè)诒闅v時(shí)使用get()而不調(diào)用remove(),那么我們將得到3個(gè)相同的拷貝,而這正是我們期望的FIFO隊(duì)列的行為。假如你需要遍歷并保留數(shù)據(jù),可以使用標(biāo)準(zhǔn)的Iterator機(jī)制。

     

     

    主站蜘蛛池模板: 久久久久亚洲Av片无码v| 亚洲精品中文字幕无码蜜桃| 免费人成大片在线观看播放电影| 亚洲国模精品一区| 免费A级毛片在线播放| 亚洲看片无码在线视频| 又粗又大又硬又爽的免费视频| 国产精品免费久久久久影院| 色婷婷亚洲十月十月色天| 18禁成年无码免费网站无遮挡| aa午夜免费剧场| 91亚洲精品自在在线观看| 日批日出水久久亚洲精品tv| 在线美女免费观看网站h| 国产精品亚洲二区在线| 亚洲韩国—中文字幕| 一本色道久久88综合亚洲精品高清| 精品国产一区二区三区免费| 亚洲乱码中文字幕在线| 亚洲成年人在线观看| 国产zzjjzzjj视频全免费| 最近免费中文字幕mv在线电影| 直接进入免费看黄的网站| 亚洲国产高清美女在线观看| 久久久久亚洲AV成人网人人网站| 大学生a级毛片免费观看| 日本三级在线观看免费| 亚洲精品无码成人| 亚洲色欲或者高潮影院| 中文字幕人成人乱码亚洲电影| 久久WWW色情成人免费观看| 国产午夜免费高清久久影院| 黄网站在线播放视频免费观看 | 亚洲精品NV久久久久久久久久| 国产好大好硬好爽免费不卡| 国产精品亚洲а∨天堂2021| 国产成人亚洲合集青青草原精品| 亚洲精品无码AV人在线播放| 全亚洲最新黄色特级网站 | 最近免费中文字幕中文高清| 亚洲乱码卡一卡二卡三|