<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 - Bag組

    Posted on 2005-08-03 12:36 laogao 閱讀(2629) 評(píng)論(2)  編輯  收藏 所屬分類: On Java

     

    首先來(lái)看Bag組。

     

    Bag

    HashBag

    BagUtils

     

    Bag是在org.apache.commons.collections包中定義的接口,它extends java.util.Collection,而它的實(shí)現(xiàn)類都被放在下面的bag包中。之所以有這樣一組類型,是因?yàn)槲覀冇袝r(shí)候需要在Collection中存放多個(gè)相同對(duì)象的拷貝,并且需要很方便的取得該對(duì)象拷貝的個(gè)數(shù)。需要注意的一點(diǎn)是它雖然extends Collection,但是如果真把它完全當(dāng)作java.util.Collection來(lái)用會(huì)遇到語(yǔ)義上的問題,詳細(xì)信息參考Javadoc

     

    HashBagBag接口的一個(gè)標(biāo)準(zhǔn)實(shí)現(xiàn)。而BagUtils提供一組static的方法讓調(diào)用者獲取經(jīng)過不同裝飾后的Bag實(shí)例。

     

    還是舉例子來(lái)看:

     

    /** Book.java */

     

    package sean.study.commons.collections;

     

    import org.apache.commons.lang.builder.ToStringBuilder;

    import org.apache.commons.lang.builder.ToStringStyle;

     

    public class Book {

       

        private String name;

        private String isbn;

        private double retailPrice;

       

        public Book() {

        }

       

        public Book(String name, String isbn, double retailPrice) {

            this.name = name;

            this.isbn = isbn;

            this.retailPrice = retailPrice;

        }

       

        public String toString() {

            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

            .append("name", name)

            .append("ISBN", isbn)

            .append("retailPrice", retailPrice)

            .toString();

        }

     

        public String getIsbn() {

            return isbn;

        }

     

        public void setIsbn(String isbn) {

            this.isbn = isbn;

        }

     

        public String getName() {

            return name;

        }

     

        public void setName(String name) {

            this.name = name;

        }

     

        public double getRetailPrice() {

            return retailPrice;

        }

     

        public void setRetailPrice(double retailPrice) {

            this.retailPrice = retailPrice;

        }

       

    }

     

    /** BagUsage.java */

     

    package sean.study.commons.collections;

     

    import org.apache.commons.collections.Bag;

    import org.apache.commons.collections.BagUtils;

    import org.apache.commons.collections.bag.HashBag;

    import org.apache.commons.lang.StringUtils;

     

    public class BagUsage {

     

        public static void main(String[] args) {

            demoBagUsage();

        }

     

        public static void demoBagUsage() {

     

            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);

     

            // create a bag

            Bag myBag = BagUtils.typedBag(new HashBag(), Book.class);

            myBag.add(book1, 360);

            myBag.add(book2, 500);

            myBag.add(book3, 170);

     

            // calculations for a bag

            double price1 = book1.getRetailPrice();

            double price2 = book2.getRetailPrice();

            double price3 = book3.getRetailPrice();

            int book1Count = myBag.getCount(book1);

            int book2Count = myBag.getCount(book2);

            int book3Count = myBag.getCount(book3);

            double totalValue = (price1 * book1Count) + (price2 * book2Count)

                    + (price3 * book3Count);

     

            // dispaly results

            System.out.println("There are " + book1Count + " copies of "

                    + book1.getName() + ".");

            System.out.println("There are " + book2Count + " copies of "

                    + book2.getName() + ".");

            System.out.println("There are " + book3Count + " copies of "

                    + book3.getName() + ".");

            System.out.println("The total value of these books is: " + totalValue);

     

            System.out.println();

     

        }

     

    }

     

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

     

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

    There are 360 copies of Refactoring Workbook.

    There are 500 copies of J2EE Design Patterns.

    There are 170 copies of Agile Software Development.

    The total value of these books is: 43258.0

     

    需要說明的是,以上的代碼僅僅為了演示如何使用Bag,實(shí)際應(yīng)用不建議像這樣硬編碼。

     

     

    Feedback

    # re: [Jakarta Commons筆記] Commons Collections - Bag組  回復(fù)  更多評(píng)論   

    2005-08-03 19:03 by emu
    想不出什么情形下需要用到。

    # re: [Jakarta Commons筆記] Commons Collections - Bag組  回復(fù)  更多評(píng)論   

    2005-08-04 09:13 by 大胃
    其實(shí)這個(gè)Bag接口對(duì)應(yīng)的是一個(gè)已經(jīng)有較明確定義的一種數(shù)據(jù)結(jié)構(gòu):
    http://www.nist.gov/dads/HTML/bag.html

    以往我們用Collection接口,或者是預(yù)定義的Map、List等,甚至是我們自己用數(shù)組實(shí)現(xiàn)的結(jié)構(gòu)實(shí)際上都可以模擬出這個(gè)bag數(shù)據(jù)結(jié)構(gòu)的行為。但是這樣做并不方便。Bag為我們提供了便利。

    我能夠想到的是,這個(gè)Bag在我們需要處理類似倉(cāng)庫(kù)的系統(tǒng)中還是比較有用的,對(duì)于定義好的貨品,可以用枚舉,甚至簡(jiǎn)單點(diǎn)用String也是可以,然后就可以成批add和remove,并且直接獲取當(dāng)前數(shù)量進(jìn)行盤點(diǎn)或者庫(kù)存查詢。如果沒有Bag,我們需要for循環(huán)去add和remove。或者如果你實(shí)現(xiàn)的是一個(gè)Map,那么你在add和remove時(shí)還需要自己去判斷是否已經(jīng)有該貨品存在,remove時(shí)甚至需要自己去檢查庫(kù)存是否夠用等等。

    Bag只是提供一些便利,如果你需要類似的功能,覺得好用,就用它,不好用的話,自己實(shí)現(xiàn)咯。
    主站蜘蛛池模板: 两个人看的www免费视频中文| 另类专区另类专区亚洲| 无人在线直播免费观看| 亚洲性无码AV中文字幕| 亚洲人成无码网WWW| 8090在线观看免费观看| 国产精品亚洲综合天堂夜夜| 国产精品亚洲一区二区三区在线| 91精品国产免费久久久久久青草| 污视频网站免费在线观看| 亚洲a在线视频视频| 国产国产人免费人成免费视频| a毛片在线看片免费| 亚洲免费网站观看视频| 亚洲AV无码专区国产乱码电影| 最新仑乱免费视频| 久久免费国产精品一区二区| 亚洲精品无码一区二区| 亚洲成a人片77777老司机| 免费一级毛片在线观看| 亚洲视频免费播放| 久久精品无码免费不卡| 亚洲人成网站999久久久综合| 亚洲AV无码专区在线播放中文| 国产v片免费播放| 桃子视频在线观看高清免费完整| 久久久精品国产亚洲成人满18免费网站| 亚洲av午夜精品无码专区| 亚洲精品夜夜夜妓女网| 国产免费看插插插视频| 福利免费观看午夜体检区 | 99精品全国免费观看视频| 在线看片免费人成视频福利| 久久亚洲精品无码网站| 亚洲国产av一区二区三区丶| 亚洲国产一二三精品无码| 免费jjzz在线播放国产| 免费高清资源黄网站在线观看| 蜜桃AV无码免费看永久| 在线成人精品国产区免费| 久久久久久久国产免费看|