小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[Jakarta Commons筆記] Commons Collections - Buffer組

 moonboat 2008-11-12

來看Buffer組。

 

Buffer

BlockingBuffer

BoundedFifoBuffer

PriorityBuffer

UnboundedFifoBuffer

BufferUtils

 

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

 

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

 

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

 

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多